gpt4 book ai didi

sql - Big Query 或 SQL reshape 数据

转载 作者:行者123 更新时间:2023-12-01 04:56:36 26 4
gpt4 key购买 nike

我使用 bigquery 存储数据
例如我有 table

userId|event  |count
------------- |
1 |event1 |1
1 |event2 |2
2 |event1 |2
2 |event2 |1
2 |event3 |4
3 |event1 |3
4 |event3 |5
4 |event4 |5

我怎么能得到这个表?(关于列事件{索引}计数总和)
仅使用能力 BigQuery(或 SQL)
userId|event1 |event2|event3|event4
----------------------------------
1 |1 |2 |0 |0 |
2 |2 |1 |4 |0 |
3 |0 |0 |0 |0 |
4 |0 |0 |5 |5 |

最佳答案

如果您只有以下几个事件适合您 - 您将需要构建尽可能多的相应行,因为您有不同的事件。如果预期事件的数量不变 - 您总是可以轻松地构建一次此类查询,然后使用它

SELECT 
userID,
SUM(CASE WHEN event = 'event1' THEN [count] ELSE 0 END) AS event1,
SUM(CASE WHEN event = 'event2' THEN [count] ELSE 0 END) AS event2,
SUM(CASE WHEN event = 'event3' THEN [count] ELSE 0 END) AS event3,
SUM(CASE WHEN event = 'event4' THEN [count] ELSE 0 END) AS event4
FROM YourTable
GROUP BY userId

如果你需要更动态的东西 - 看看非常相似的例子 https://stackoverflow.com/a/36623258/5221944

在您的情况下,构建动态 sql 的查询将如下所示
SELECT 'SELECT userId, ' + 
GROUP_CONCAT_UNQUOTED(
'SUM(IF(event="'+event+'",[count],0)) as [d_'+REPLACE(event,'/','_')+']'
)
+ ' FROM YourTable GROUP BY userId ORDER BY userId'
FROM (
SELECT event FROM YourTable GROUP BY event ORDER BY event
)

请注意下面的行
      'SUM(IF(event="'+event+'",[count],0)) as [d_'+REPLACE(event,'/','_')+']'

它确保您的偶数名称符合字段/列名称的要求
如果您的事件总是看起来像 event1、event2 等,您可以简化此行并使用
      'SUM(IF(event = "' + event + '", [count], 0)) as ' + event

关于sql - Big Query 或 SQL reshape 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36678425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com