2020-08-14 00:41:50
SQL 中的 Grouping Sets 语句是一种高级分组操作,允许同时计算多个不同维度的聚合结果,相当于多个 GROUP BY 组合的 UNION ALL 的简写形式。
基本功能:Grouping Sets 指定多个分组规则,一次性计算不同维度的聚合结果。例如:
SELECT city, car_model, sum(quantity) FROM dealer GROUP BY GROUPING SETS ((city, car_model), (city), (car_model), ())等价于分别按 (city, car_model)、(city)、(car_model) 和全局聚合后通过 UNION ALL 合并结果。
执行计划对比:
Union All 版本:每个分组规则生成独立的子查询,分别扫描表、投影列、聚合神空友,最后合并结果。
Grouping Sets 版本:通过 Expand 操作生成多组分组键,单次扫描表后按不同维亏燃度聚合,避免重复扫描。
关键特性:
高效性:底层优化为单次表扫描,而非多次扫描(如 Union All 方式)。
结果标识:通过 GROUPING__ID 列标记结果所属的分组维度(如 0 表示 (city, car_model) 分组)。
空值处理:未参与分组的列在结果中显示为 NULL,全局聚合结果中所有分组列均为 NULL。
应用场景:
多维度数据分游槐析(如同时查看城市、车型及两者的交叉统计)。
替代多个独立查询,简化代码并提升性能。
与 RollUp/Cube 的关系:
RollUp:生成层级分组(如 (a,b)、(a)、()),是 Grouping Sets 的子集。
Cube:生成所有可能的分组组合(如 (a,b)、(a)、(b)、()),基于 Grouping Sets 实现。
示例结果解析:
总结:Grouping Sets 通过单次操作实现多维度聚合,提升效率且代码简洁,是 OLAP 分析中强大的工具。