Oracle命令 ROLLUP


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

先通览下整个表:EMP

SQL> SELECT * FROM EMP ;

--查询结果:

  1. EMPNO ENAME      JOB         MGR HIREDATE          SAL DEPTNO  
  2. ----- ---------- --------- ----- ----------- --------- ------  
  3.  7369 SMITH      CLERK      7902 1980/12/17     800.00     20  
  4.  7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00     30  
  5.  7521 WARD       SALESMAN   7698 1981/2/22     1250.00     30  
  6.  7566 JONES      MANAGER    7839 1981/4/2      2975.00     20  
  7.  7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00     30  
  8.  7698 BLAKE      MANAGER    7839 1981/5/1      2850.00     30  
  9.  7782 CLARK      MANAGER    7839 1981/6/9      2450.00     10  
  10.  7788 SCOTT      ANALYST    7566 1987/4/19     3000.00     20  
  11.  7839 KING       PRESIDENT       1981/11/17    5000.00     10  
  12.  7844 TURNER     SALESMAN   7698 1981/9/8      1500.00     30  
  13.  7876 ADAMS      CLERK      7788 1987/5/23     1100.00     20  
  14.  7900 JAMES      CLERK      7698 1981/12/3      950.00     30  
  15.  7902 FORD       ANALYST    7566 1981/12/3     3000.00     20  
  16.  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(职业)分组,来计算每一类职业的平均薪水:

  1. SQL>  SELECT JOB,  AVG(SAL) FROM EMP GROUP BY JOB ORDER BY JOB;  
  2.    
  3. JOB         AVG(SAL)  
  4. --------- ----------  
  5. ANALYST         3000  
  6. CLERK         1037.5  
  7. MANAGER   2758.33333  
  8. PRESIDENT       5000  
  9. SALESMAN        1400  
  • 1
  • 2
  • 下一页

相关内容