CUBE 和 ROLLUP 之间的区别在于:
- CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
- ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是ROLLUP(A, B, C)的话,首先分成两大步:(1)对于符合条件的每个A,先对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY;(2)对全表进行GROUP BY操作。
按CB,GDM,CZJM统计
SELECT CB,GDM,CZJM,COUNT(*)
FROM LTJ_DDC
GROUP BY ROLLUP(CB,GDM,CZJM)
如果是GROUP BY CUBE(A, B, C),(1)先对全表进行统计;(2)则首先对(C)进行GROUP BY;(3)然后依次是对于每一个B,先统计B,再统计(B,C);(4)对每个A,按(A)、(A,C)、(A,B)、(A,B,C)进行检索。实例如下:
SELECT CB,GDM,CZJM,COUNT(*)
FROM LTJ_DDC
GROUP BY CUBE(CB,GDM,CZJM)