Oracle命令 ROLLUP
Oracle命令 ROLLUP
重温SQL基本命令时,发现GROUP BY ROLLUP() 这个命令有所生疏,于是自己琢磨了下,写下来。
先通览下整个表:EMP
SQL> SELECT * FROM EMP ;
--查询结果:
- EMPNO ENAME JOB MGR HIREDATE SAL DEPTNO
- ----- ---------- --------- ----- ----------- --------- ------
- 7369 SMITH CLERK 7902 1980/12/17 800.00 20
- 7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 30
- 7521 WARD SALESMAN 7698 1981/2/22 1250.00 30
- 7566 JONES MANAGER 7839 1981/4/2 2975.00 20
- 7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 30
- 7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
- 7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
- 7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
- 7839 KING PRESIDENT 1981/11/17 5000.00 10
- 7844 TURNER SALESMAN 7698 1981/9/8 1500.00 30
- 7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
- 7900 JAMES CLERK 7698 1981/12/3 950.00 30
- 7902 FORD ANALYST 7566 1981/12/3 3000.00 20
- 7934 MILLER CLERK 7782 1982/1/23 1300.00 10
在对字段 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(职业)分组,来计算每一类职业的平均薪水:
- SQL> SELECT JOB, AVG(SAL) FROM EMP GROUP BY JOB ORDER BY JOB;
- JOB AVG(SAL)
- --------- ----------
- ANALYST 3000
- CLERK 1037.5
- MANAGER 2758.33333
- PRESIDENT 5000
- SALESMAN 1400
|
评论暂时关闭