GROUP BY的扩展

2015-07-23 18:08:19 · 作者: · 浏览: 0

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: