Oracle 除了goup by 分组汇总还支持扩张Rollup, Cube 用法.
. Rollup 用法 Group By Rollup(A, B, C,...N)
汇总:以(A, B, C,..N) 汇总-->>以(A, B, C ,..N-1)汇总...-->>以(A, B)汇总-->>以A汇总. 分组数n+1组
. Cube 用法 Group By Cube(A, B, C,..N)
汇总:以(A,B,C,..N)汇总 -->>以(A,B), (A,C),...(A,N)汇总.....--->>以A汇总 -->>全表汇总. 分组数2的n次方
案例分析:
A. Rollup 用法
SELECT t.deptno, t.job, SUM(t.sal)
FROM emp t
GROUP BY ROLLUP(t.deptno, t.job);
结果:
说明: 红色部分代表以部门代码汇总求和
蓝色部分代表全表汇总
假设将上述的分组位置反过来呢?
SELECT t.job,t.deptno, SUM(t.sal)
FROM emp t
GROUP BY ROLLUP(t.job,t.deptno );
结果:
说明: 红色部分说明以员工职位红色汇总
蓝色部分全表汇总
B. Cube 用法
SELECT t.deptno,t.job, SUM(t.sal)
FROM emp t
GROUP BY CUBE(t.deptno ,t.job);
结果:
说明:红色部门代表以员工职位汇总.
黑色部分代表以部门汇总.
蓝色部分代表以全表汇总.
假设也将分组字段交换呢?
SELECT t.job, t.deptno, SUM(t.sal)
FROM emp t
GROUP BY CUBE(t.job,t.deptno);
结果:
注意对比两个. 数据都是按照同样的分组.分组字段位置不影响结果.