【问题标题】:Big Query Transpose [duplicate]大查询转置[重复]
【发布时间】:2016-08-05 14:31:06
【问题描述】:

我有一个包含以下列的 Google Big Query 表:

date  | user | group | value
----------------------------
date1 | user1 | group1 | 10
----------------------------
date1 | user2 | group1 | 5
----------------------------
date2 | user1 | group1 | 20
----------------------------
date2 | user2 | group1 | 10
---------------------------
etc...

现在我想把它转换成这个:

group  | date1 | date2
----------------------
group1 | 15    | 30

所以我想获得每组每天的价值总和。我写了一个如下所示的查询:

SELECT date, group, value FROM [table] GROUP BY date, group, value

但是我该如何转置这个,以便每个列都是一个日期,而每一行都是该值的总计的集合?

【问题讨论】:

    标签: mysql google-bigquery


    【解决方案1】:

    目前在 BigQuery 中还没有很好的方法,但您可以按照以下想法进行操作

    第 1 步

    在查询下方运行

    SELECT 'SELECT [group], ' + 
       GROUP_CONCAT_UNQUOTED(
          'SUM(IF([date] = "' + [date] + '", value, NULL)) as [d_' + REPLACE([date], '/', '_') + ']'
       ) 
       + ' FROM YourTable GROUP BY [group] ORDER BY [group]'
    FROM (
      SELECT [date] FROM YourTable GROUP BY [date] ORDER BY [date]
    )
    

    结果 - 你会得到如下字符串(为了便于阅读,它在下面被格式化)

    SELECT 
        [group], 
        SUM(IF([date] = "date1", value, NULL)) AS [d_date1],
        SUM(IF([date] = "date2", value, NULL)) AS [d_date2] 
    FROM YourTable 
    GROUP BY [group] 
    ORDER BY [group]   
    

    第 2 步

    只需在组合查询上方运行

    结果如下所示

    group   d_date1 d_date2  
    group1  15      30      
    

    注意 1:如果您有很多组需要处理太多的手动工作,那么第 1 步会很有帮助。在这种情况下 - 第 1 步可帮助您生成查询

    注意 2:这些步骤可以在您选择的任何客户端中轻松实现,或者您可以在 BigQuery 网页界面中运行这些步骤

    您可以在我的其他帖子中查看有关旋转的更多信息。

    How to scale Pivoting in BigQuery?
    请注意 - 每个表有 10K 列的限制 - 因此您只能使用 10K 个组织。
    您还可以将下面的示例视为简化示例(如果上面的示例过于复杂/冗长):
    How to transpose rows to columns with large amount of the data in BigQuery/SQL?
    How to create dummy variable columns for thousands of categories in Google BigQuery?
    Pivot Repeated fields in BigQuery

    【讨论】:

    • 非常感谢您的回答。效果很好!
    • 真的很有帮助!但就我而言,我不得不使用CONCAT 来生成查询,因为找不到GROUP_CONCAT_UNQUOTED
    猜你喜欢
    • 2018-05-19
    • 2020-07-10
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    相关资源
    最近更新 更多