如何在BigQuery中将长格式数据分组聚合为列表形式?
BigQuery实现订单与多商品ID的聚合转换
原表结构
| orderId | productId |
|---|---|
| 1 | 23 |
| 1 | 24 |
| 1 | 27 |
| 2 | 25 |
| 2 | 26 |
| 3 | 27 |
目标表结构
| orderId | productIds |
|---|---|
| 1 | 23,24,27 |
| 2 | 25,26 |
| 3 | 27 |
直接使用BigQuery的STRING_AGG聚合函数就能完成这个转换,核心SQL语句如下:
SELECT orderId, STRING_AGG(CAST(productId AS STRING), ',') AS productIds FROM `你的项目ID.你的数据集ID.你的表名` -- 替换为实际的表路径 GROUP BY orderId;
关键说明:
STRING_AGG负责将同一orderId下的所有productId拼接成逗号分隔的字符串,由于productId是数值类型,需要先用CAST转成字符串类型才能参与拼接。GROUP BY orderId用来按订单ID分组,确保每个订单对应的商品ID都聚合到一行。
如果需要让拼接后的商品ID保持特定顺序(比如升序),可以在STRING_AGG中加入排序逻辑:
SELECT orderId, STRING_AGG(CAST(productId AS STRING), ',' ORDER BY productId) AS productIds FROM `你的项目ID.你的数据集ID.你的表名` GROUP BY orderId;
内容的提问来源于stack exchange,提问作者Hal
相关产品推荐
相关产品推荐

