如何用单条SQL语句实现多列组合GROUP BY并包含ALL聚合结果?
用单条SQL实现多列全组合分组的聚合查询
你可以通过GROUP BY CUBE语法结合COALESCE函数实现需求,单条查询即可生成所有列值组合的聚合结果:
SELECT COALESCE("COUNTRY", 'ALL') AS "COUNTRY", COALESCE("PRODUCT", 'ALL') AS "PRODUCT", SUM("VALUE") AS "SUM(VALUE)" FROM "PRODUCTS" GROUP BY CUBE("COUNTRY", "PRODUCT") ORDER BY CASE WHEN "COUNTRY" = 'ALL' THEN 1 ELSE 0 END, "COUNTRY", CASE WHEN "PRODUCT" = 'ALL' THEN 1 ELSE 0 END, "PRODUCT";
关键说明
CUBE("COUNTRY", "PRODUCT")会自动生成所有可能的分组维度组合:- 按
(COUNTRY, PRODUCT)分组(对应原始行的聚合) - 按
COUNTRY单独分组(每个国家的总价值,产品维度显示ALL) - 按
PRODUCT单独分组(每个产品的总价值,国家维度显示ALL) - 无分组(所有数据的总价值,两个维度都显示
ALL)
- 按
COALESCE函数将分组过程中产生的NULL值替换为ALL,匹配你需要的输出格式- 额外的
ORDER BY子句是为了让结果和你给出的预期输出顺序一致,可根据需求调整
结果验证
针对你的示例数据,执行上述查询后会直接返回:
COUNTRY PRODUCT SUM(VALUE) cz p1 5 cz p2 10 cz ALL 15 de p1 8 de p2 15 de ALL 23 ALL p1 13 ALL p2 25 ALL ALL 38
内容的提问来源于stack exchange,提问作者Smajl
相关产品推荐
相关产品推荐

