【问题标题】:Group by and sum depending on cases in Google Big Query根据 Google Big Query 中的案例分组和求和
【发布时间】:2019-12-10 20:30:04
【问题描述】:

数据看起来像-

A_value      B_value    C_value     Type
   1          null        null       A
   2          null        null       A
  null         3          null       B
  null         4          null       B
  null        null         5         C
  null        null         6         C

当类型为“A”时,我想对“A_value”求和并存储在名为“Type_value”的不同列中,当类型为“B”时,我想对“B_value”求和并存储在“Type_value”列中并为“C”做类似的事情

预期结果-

Type_value      Type
    3            A
    7            B
    11           C

如何实现这个结果?

【问题讨论】:

    标签: group-by google-bigquery sum case-when


    【解决方案1】:

    以下是 BigQuery 标准 SQL

    #standardSQL
    SELECT SUM(CASE Type
        WHEN 'A' THEN A_value
        WHEN 'B' THEN B_value
        WHEN 'C' THEN C_value
        ELSE 0
      END) AS Type_value, Type 
    FROM `project.dataset.table`
    GROUP BY Type   
    

    如果应用于您问题中的样本数据 - 结果是

    Row Type_value  Type     
    1   3           A    
    2   7           B    
    3   11          C    
    

    另一个可能的选择是重用您的数据具有仅在相应列中具有值的模式这一事实。所以如果是真的 - 你可以使用以下版本

    #standardSQL
    SELECT SUM(IFNULL(A_value, 0) + IFNULL(B_value, 0) + IFNULL(C_value, 0)) AS Type_value, Type 
    FROM `project.dataset.table`
    GROUP BY Type   
    

    显然结果相同

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多