Oracle命令 ROLLUP

2015-02-02 19:28:06 · 作者: · 浏览: 19

重温SQL基本命令时,发现GROUP BY ROLLUP() 这个命令有所生疏,于是自己琢磨了下,写下来。


先通览下整个表:EMP


SQL> SELECT * FROM EMP ;


--查询结果:


在对字段 JOB, SAL, DEPTNO 进行分组小计前,先进性分组排序,以便和小计做对比。? 做这一步前,先讲下GROUP BY ROOLUP命令的基本用法:在完成了数据基本分组之后,根据分组字段列表(注释:也就是GROUP BY后面的字段,比如GROUP BY JOB , DEPTNO,那么分组字段就是JOB,DEPTNO。 以此类推,但进性分组小计时:GROUP BY ROLLUP(JOB, DEPTNO ); 那么分组字段依旧是JOB, DEPTNO ),


按照从右向左的顺序,每次去掉最后一个字段 <也就是每次去掉字段列表最右边的字段>(注释:每次去掉字段列表的最后一个字段是什么意思呢?比如:GROUP BY ROLLUP(EMPNO, ENAME,JOB, SAL,DEPTNO );


那么这次分组小计将根据字段列表的字段个数分5步进行:


1.GROUP BY EMPNO, ENAME,JOB, SAL,DEPTNO;第一次分组。


2.GROUP BY EMPNO, ENAME,JOB, SAL;第二次分组。(去掉最后一个字段DEPTNO,? 后的汇总)


3.GROUP BY EMPNO, ENAME,JOB;第三次分组。(去掉最后一个字段SAL, 后的汇总)


4.GROUP BY EMPNO, ENAME;第四次分组。(去掉最后一个字段JOB, 后的汇总)


5.4.GROUP BY EMPNO;第五次分组。(去掉最后一个字段ENAME ,后的汇总)


下面先来看根据JOB(职业)分组,来计算每一类职业的平均薪水: