首页 > 解决方案 > 查找 MAX 列 BigQuery SQL

问题描述

我正在尝试对列中的数据进行“规范化”,使其范围在 0 和 1 之间。我最初的计划是找到该列的 MAX 值并执行以下计算:column/MAX(column)。我遇到的问题是输出看起来像这样

在此处输入图像描述

就这样继续下去……

显然,我的查询似乎正在拉动该特定行的最大值,因为它只有一个值,因此与所述值匹配,并且标准化数据始终为一。

这是我用来查找综合浏览量的查询(数据来自 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

然后我在另一个表中调用页面浏览量,如下所示:

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 很陌生,所以如果我做的事情绝对是愚蠢的,我只能道歉。

标签: sqlgoogle-analyticsgoogle-bigquerynormalization

解决方案


以下是 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       

希望您可以根据实际情况轻松调整以上内容


推荐阅读