暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL聚合函数大比拼:ROLLUP、CUBE与GROUPING SETS,用谁更胜一筹?

数码百科 2024-09-01
150

假设我们有一个包含产品、地区、销售金额等信息的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 #销售数据分析

文章转载自数码百科,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论