1、oracle中cube 与 rollup的区别
Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。
rollup(col1, col2,…) 和 cube(col1, col2,…) 用法区别在 cube 在 rollup 汇总的记录集上,还会增加对 col2 等字段的汇总;
ROLLUP只对第一个参数(字段)进行汇总,CUBE可以对参数(字段)依次汇总,所以ROLLUP中参数个数只有一个会起作用(且排名在前的参数)。
ROLLUP(A, B, C):
首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。
CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),©,最后对全表进行GROUP BY操作。
CUBE 和 ROLLUP 之间的区别在于:
CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
例如rollup使用
只会对deptno字段进行汇总,然后求其deptno,job 的总汇总;
例如cude使用
不但要对deptno进行汇总,还会对job进行汇总;然后再对deptno和job进行总汇总;
2、 Group by中其他函数的使用
1>Grouping 函数
当使用rollup和cude操作符时生成统计结果时,某个统计结果可能用到一列或者多列,也可能没有使用任何项。为了确定统计结果是否使用了特定列,可以使用Grouping函数。
如果该函数返回0,表示统计结果中使用了该列;如果该函数返回1,则表示统计结果没有使用该列
2>Grouping Sets操作符
grouping sets操作符是Group by子句的进一步扩展,在Oracle Database 9i之前使用group by子句一次只能显示单种分组统计结果,那么需要编写多条select语句。从Oracle Database 9i开始,通过使用Group sets操作符,可以合并多个分组的统计结果,从而简化多个分组操作。