我有一个包含以下列的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
但是我该如何转置它以使每个列都是一个日期,每一行是该值的总计的集合?
答案 0 :(得分:2)
目前还没有很好的方法在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 Web UI中运行这些步骤
您可以在我的其他帖子中看到有关旋转的更多信息。
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