如何在GCP SQL单查询中同时实现多个STRING_AGG函数聚合
解决方法
你可以通过条件聚合的方式,在同一个STRING_AGG函数里针对不同的action值进行筛选,这样就能在同一查询中同时生成"添加""更新""删除"对应的产品聚合列。
修改后的GCP BigQuery SQL语句如下:
CREATE OR REPLACE TABLE dummy_table AS SELECT a.order, STRING_AGG(CASE WHEN b.action = 'Add' THEN b.products END, ', ') AS products_added, STRING_AGG(CASE WHEN b.action = 'Update' THEN b.products END, ', ') AS products_updated, STRING_AGG(CASE WHEN b.action = 'Delete' THEN b.products END, ', ') AS products_deleted FROM [table with orders] a INNER JOIN [table with orders, products and actions] b ON a.order = b.order GROUP BY a.order;
关键说明:
- 移除原查询中
WHERE b.action = 'Add'的过滤条件,确保所有操作类型的数据都被纳入聚合范围 - 每个
STRING_AGG函数内部通过CASE语句精准筛选对应操作的产品,不符合条件的行返回NULL,而STRING_AGG会自动忽略NULL值,不会干扰结果 - 若某订单无对应操作记录(如无删除行为),对应列会显示
NULL,可通过IFNULL(STRING_AGG(...), '')将其替换为空字符串
内容的提问来源于stack exchange,提问作者user28412706
相关产品推荐
相关产品推荐

