第八章 SQL高级处理 8-2 GROUPING运算符

时间:2024-07-14 15:34:02
一、同时得到合计行
合计行是不指定聚合键时得到的汇总结果。

第八章 SQL高级处理 8-2 GROUPING运算符

UNION ALL与UNION的不同之处是它不会对结果进行排序,因此比UNION性能更好。
二、ROLLUP——同时得出合计和小计
GROUPING 运算符包含以下3种:
(1)ROLLUP
(2)CUBE
(3)GROUPING SETS
注:目前PostgreSQL和MySQL并不支持GROUPING运算符(MySQL仅支持ROLLUP)。
1、ROLLUP的使用方法
第八章 SQL高级处理 8-2 GROUPING运算符

第八章 SQL高级处理 8-2 GROUPING运算符

第八章 SQL高级处理 8-2 GROUPING运算符

第八章 SQL高级处理 8-2 GROUPING运算符

三、GROUPING函数——让NULL更加容易分辨
为了避免混淆,SQL 供了一个用来判断超级分组记录的 NULL 的特定函数 —— GROUPING 函数。该函数在其参数列的值为超级分组记录 所产生的 NULL 时返回 1,其他情况返回 0
第八章 SQL高级处理 8-2 GROUPING运算符

第八章 SQL高级处理 8-2 GROUPING运算符

第八章 SQL高级处理 8-2 GROUPING运算符

在实际业务中,需要获取包含合计或者小计的汇总结果(这种情况是最多的)时,就可以使用ROLLUP和GROUPING函数来实现了。
四、用数据来搭积木
所谓CUBE,就是将GROUP BY子句中聚合键的“所有可能组合”的汇总结果集中到一个结果中。
因此,组合的个数就是 2n(n 是聚合键的 个数)。2的n次方。

第八章 SQL高级处理 8-2 GROUPING运算符
第八章 SQL高级处理 8-2 GROUPING运算符
注:可以把CUBE理解为使用聚合键进行切割的模块堆积成一个立方体。
五、GROUPING SETS——得到期望的积木
GROUPING SETS可以从ROLLUP和CUBE中取出部分记录。

第八章 SQL高级处理 8-2 GROUPING运算符
然而,由于期望获得不固定结果的情况少之又少,因此与ROLLUP或者CUBE比起来,使用GROUPING SETS的机会也就很少了。