查找 MAX 列 BigQuery SQL
Finding MAX column BigQuery SQL
我正在尝试 'normalize' 列中的数据,使其介于 0 和 1 之间。我最初的计划是找到该列的 MAX 值并执行以下计算:
column/MAX(列)。我遇到的问题是输出看起来像这样
就这样继续下去...
显然,我的查询似乎正在提取该特定行的最大值,因为它只有一个值,所以与所述值匹配,并且规范化数据始终为一个。
这是我用来查找综合浏览量的查询(数据来自 GA,架构与默认架构相同):
SELECT
pageTitle,
COUNT(*) AS pageviews
FROM (
SELECT
hits.page.pageTitle,
hits.type,
FROM
`medicine-matter.131114627.ga_sessions_*` AS GA,
UNNEST(GA.hits) AS hits
WHERE
type = 'PAGE'
)
GROUP BY
pageTitle
ORDER BY
pageviewDESC
然后我在另一个 table 中调用综合浏览量,如下所示:
SELECT
pageviews,
MAX(pageviews) as MAX,
pageviews/ MAX(pageviews) as normal_pageview
FROM
`table`
WHERE
pageviews > 1
group by
pageTitle,
pageviews
ORDER BY
normal_pageview DESC
我是 SQL 的新手,所以如果我做的事情绝对是愚蠢的,我只能道歉。
以下适用于 BigQuery 标准 SQL
#standardSQL
SELECT pageviews,
MAX(pageviews) OVER() max_pageviews,
ROUND(pageviews / MAX(pageviews) OVER(), 2) normal_pageviews
FROM `project.dataset.table`
您可以使用您问题中的示例数据来测试和使用上面的示例,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT 22 pageviews UNION ALL
SELECT 4 UNION ALL
SELECT 14 UNION ALL
SELECT 99 UNION ALL
SELECT 24 UNION ALL
SELECT 4 UNION ALL
SELECT 8
)
SELECT pageviews,
MAX(pageviews) OVER() max_pageviews,
ROUND(pageviews / MAX(pageviews) OVER(), 2) normal_pageviews
FROM `project.dataset.table`
结果
Row pageviews max_pageviews normal_pageviews
1 22 99 0.22
2 4 99 0.04
3 14 99 0.14
4 99 99 1.0
5 24 99 0.24
6 4 99 0.04
7 8 99 0.08
希望您可以根据实际情况轻松调整以上内容
在 BigQuery ML 预处理功能的帮助下,BigQuery Standard SQL 的另一个有趣解决方案 - ML.MIN_MAX_SCALER
Scales the numerical_expression to [0, 1] capped with MIN and MAX across all rows
#standardSQL
SELECT pageviews,
ROUND(ML.MIN_MAX_SCALER(pageviews) OVER(), 2) normal_pageviews
FROM `project.dataset.table`
我正在尝试 'normalize' 列中的数据,使其介于 0 和 1 之间。我最初的计划是找到该列的 MAX 值并执行以下计算: column/MAX(列)。我遇到的问题是输出看起来像这样
就这样继续下去...
显然,我的查询似乎正在提取该特定行的最大值,因为它只有一个值,所以与所述值匹配,并且规范化数据始终为一个。
这是我用来查找综合浏览量的查询(数据来自 GA,架构与默认架构相同):
SELECT
pageTitle,
COUNT(*) AS pageviews
FROM (
SELECT
hits.page.pageTitle,
hits.type,
FROM
`medicine-matter.131114627.ga_sessions_*` AS GA,
UNNEST(GA.hits) AS hits
WHERE
type = 'PAGE'
)
GROUP BY
pageTitle
ORDER BY
pageviewDESC
然后我在另一个 table 中调用综合浏览量,如下所示:
SELECT
pageviews,
MAX(pageviews) as MAX,
pageviews/ MAX(pageviews) as normal_pageview
FROM
`table`
WHERE
pageviews > 1
group by
pageTitle,
pageviews
ORDER BY
normal_pageview DESC
我是 SQL 的新手,所以如果我做的事情绝对是愚蠢的,我只能道歉。
以下适用于 BigQuery 标准 SQL
#standardSQL
SELECT pageviews,
MAX(pageviews) OVER() max_pageviews,
ROUND(pageviews / MAX(pageviews) OVER(), 2) normal_pageviews
FROM `project.dataset.table`
您可以使用您问题中的示例数据来测试和使用上面的示例,如下例所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT 22 pageviews UNION ALL
SELECT 4 UNION ALL
SELECT 14 UNION ALL
SELECT 99 UNION ALL
SELECT 24 UNION ALL
SELECT 4 UNION ALL
SELECT 8
)
SELECT pageviews,
MAX(pageviews) OVER() max_pageviews,
ROUND(pageviews / MAX(pageviews) OVER(), 2) normal_pageviews
FROM `project.dataset.table`
结果
Row pageviews max_pageviews normal_pageviews
1 22 99 0.22
2 4 99 0.04
3 14 99 0.14
4 99 99 1.0
5 24 99 0.24
6 4 99 0.04
7 8 99 0.08
希望您可以根据实际情况轻松调整以上内容
在 BigQuery ML 预处理功能的帮助下,BigQuery Standard SQL 的另一个有趣解决方案 - ML.MIN_MAX_SCALER
Scales the numerical_expression to [0, 1] capped with MIN and MAX across all rows
#standardSQL
SELECT pageviews,
ROUND(ML.MIN_MAX_SCALER(pageviews) OVER(), 2) normal_pageviews
FROM `project.dataset.table`