【问题标题】:Finding MAX column BigQuery SQL查找 MAX 列 BigQuery SQL
【发布时间】:2020-06-25 16:26:34
【问题描述】:

我正在尝试对列中的数据进行“规范化”,使其介于 0 和 1 之间。我最初的计划是找到该列的 MAX 值并执行以下计算: 列/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

然后我像这样调用另一个表中的综合浏览量:

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

【问题讨论】:

    标签: sql google-analytics google-bigquery normalization


    【解决方案1】:

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

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

    【讨论】:

    • 很棒,效果很好。所以 OVER() 只是告诉最大化所有结果而不仅仅是行?
    【解决方案2】:

    借助 BigQuery ML 预处理功能的另一个有趣的 BigQuery 标准 SQL 解决方案 - ML.MIN_MAX_SCALER

    将 numeric_expression 缩放为 [0, 1],并在所有行中以 MIN 和 MAX 为上限

    #standardSQL
    SELECT pageviews, 
      ROUND(ML.MIN_MAX_SCALER(pageviews) OVER(), 2) normal_pageviews
    FROM `project.dataset.table`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多