GROUP BY的扩展主要包括ROLLUP,CUBE,GROUPING SETS三种形式。
ROLLUP
rollup相对于简单的分组合计增加了小计和合计,解释起来会比较抽象,下面我们来看看具体事例。
例1,统计不同部门工资的总和和所有部门工资的总和。
例2,该例中先对deptno进行分组,再对job进行分组
如果要用普通的分组函数实现,可用UNION ALL语句:
下面我们分别来看看两者的执行计划及统计信息,
ROLLUP语句:
UNION ALL语句:
不难看出,相同的功能实现,ROLLUP相对于UNION ALL效率有了极大的提升。
CUBE
cube相对于rollup,结果输出更加详细。
例1,在本例中还不是很明显。
例2,相对于rollup,cube还对工种这一列进行了专门的汇总。
GROUPING SETS
GROUPING SETS相对于ROLLUP和CUBE,结果是分类统计的,可读性更好一些。
例1:
例2:
对于该例,如何用UNION ALL实现呢?
两者的执行计划及统计信息分别如下:
GROUPING SETS:
UNION ALL: