【问题标题】:How can I PIVOT and COUNT in Standard SQL如何在标准 SQL 中进行 PIVOT 和 COUNT
【发布时间】:2018-07-12 05:40:28
【问题描述】:

我想在标准 SQL 中对以下数据进行透视和计数(使用带有 Big Query 的 Google Add-On OWOX BI):

使其在标准sql中输出如下:

所以我想根据“原因”来选择 itemsku 和 pivot 。

想不通,谢谢!!!

【问题讨论】:

    标签: sql google-bigquery bigquery-standard-sql


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    #standardSQL
    SELECT itemsku,
           COUNTIF(reason = 'BIG') AS big,
           COUNTIF(reason = 'NONE') AS none,
           COUNTIF(reason = 'SMALL') AS small
    FROM `project.dataset.table`
    GROUP BY itemsku
    

    您可以使用您问题中的虚拟数据进行测试,如下所示

    #standardSQL
    WITH `project.dataset.table` AS (
      SELECT 1010101 itemsku, 'BIG' reason UNION ALL
      SELECT 1010101, 'BIG' UNION ALL
      SELECT 13333, 'NONE' UNION ALL
      SELECT 13333, 'NONE' UNION ALL
      SELECT 14444, 'NONE' UNION ALL
      SELECT 14444, 'NONE' UNION ALL
      SELECT 14444, 'SMALL' 
    )
    SELECT itemsku,
           COUNTIF(reason = 'BIG') AS big,
           COUNTIF(reason = 'NONE') AS none,
           COUNTIF(reason = 'SMALL') AS small
    FROM `project.dataset.table`
    GROUP BY itemsku
    -- ORDER BY itemsku     
    

    结果为

    Row     itemsku     big     none    small    
    1       13333       0       2       0    
    2       14444       0       2       1    
    3       1010101     2       0       0    
    

    【讨论】:

    • 太棒了。考虑投票赞成答案。这对于识别有用的答案同样重要
    【解决方案2】:

    您可以使用条件聚合:

    select itemsku,
           sum(case when reason = 'BIG' then 1 end) as big,
           sum(case when reason = 'SMALL' then 1 end) as small,
           sum(case when reason = 'NONE' then 1 end) as none
    from t
    group by itemsku;
    

    如果您想要0s 而不是NULLs,则将else 0 添加到case 表达式中。

    【讨论】:

      猜你喜欢
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      相关资源
      最近更新 更多