查找 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`