假设我们有一个包含产品、地区、销售金额等信息的sales表。如果我们只想了解每个产品和地区的销售总额,GROUP BY就能轻松搞定:
SELECT product, region, SUM(sales_amount) AS total_sales FROM sales GROUP BY product, region;
但如果我们还想获取每个产品的总销售额、每个地区的总销售额以及整体的总销售额,GROUP BY就无能为力了。这时我们会用到 ROLLUP、CUBE 和 GROUPING SETS 这三种 SQL 聚合函数,看看它们各自的特点和适用场景。
ROLLUP
特点:
● 生成指定列的所有子集汇总,包括每个子集和整体的汇总。
● 结果按层次结构排列,从最详细的子集到最粗略的整体。
● 适用于需要多层次汇总的场景。
示例:
SELECT product, region, SUM(sales_amount) AS total_sales FROM sales GROUP BY ROLLUP(product, region);
CUBE
特点:
● 生成所有可能的子集汇总,包括每个组合和整体的汇总。
● 结果包含所有可能的列组合,不按层次结构排列。
● 适用于需要全面汇总的场景。
示例:
SELECT product, region, SUM(sales_amount) AS total FROM sales GROUP BY CUBE(product, region);
GROUPING SETS
特点:
● 允许指定多个分组条件,并生成每个分组的汇总结果。
● 结果按指定的分组条件排列。
● 适用于需要灵活组合不同分组条件的场景。
示例:
SELECT product, region, SUM(sales_amount) AS total_sales FROM sales GROUP BY GROUPING SETS ((product), (region), (product, region));
对比总结
● 功能:
○ ROLLUP 生成多层次的汇总结果。
○ CUBE 生成所有可能的子集汇总。
○ GROUPING SETS 允许指定多个分组条件。
● 输出:
○ ROLLUP 的输出结果是按层次结构排列的。
○ CUBE 的输出结果是所有可能的列组合。
○ GROUPING SETS 的输出结果是按指定的分组条件排列的。
● 用途:
○ ROLLUP 适用于需要多层次汇总的场景,如财务报告、销售分析等。
○ CUBE 适用于需要全面汇总的场景,如多维数据分析。
○ GROUPING SETS 适用于需要灵活组合不同分组条件的场景,如复杂的数据报告。
通过这些对比,你可以根据具体需求选择最适合的聚合函数。
#SQL技巧 #数据汇总 #GROUPBY #ROLLUP #销售数据分析




