ORACLE命令 CUBE

來源:互聯網
上載者:User

基本命令:GROUP BY CUBE(欄位列表);

CUBE命令根據欄位列表,產生不同的排列組合,並根據每一種組合結果,產生統計匯總。

比如:GROUP BY CUBE( city, job, age );排列組合的結果如示:

1)city,job,age

2)city, job

3)city

4)job, age 

5)age 

6)city , age 

7) job 

所以就有7種排列組合。

2)根據每一種排列組合,產生不同的統計匯總,如下:

 1) group by cube(city, job ,age );

 2)   group by cube(city, job);

 3)  group by cube(city);

  4)group by cube(job, age );

  5)group by cube(age);

  6)group by cube(city, age);

  7)group by cube(job);

 

舉例說明:

1)先統觀我們要用到的表(TABLE ):

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

2) 根據職業(JOB)求不同職業的平均薪水(SAL):

SQL> SELECT JOB, AVG(SAL) FROM EMP GROUP BY JOB ORDER BY JOB ASC ; JOB         AVG(SAL)--------- ----------ANALYST         3000CLERK           1037.5MANAGER         2758.33333PRESIDENT       5000SALESMAN        1400

3)根據不同部門(DEPTNO),不同職業(JOB),求平均薪水(SAL):

SQL> SELECT JOB, DEPTNO , AVG(SAL) FROM EMP GROUP BY JOB , DEPTNO ORDER BY JOB; JOB       DEPTNO   AVG(SAL)--------- ------ ----------ANALYST       20       3000CLERK         10       1300CLERK         20        950CLERK         30        950MANAGER       10       2450MANAGER       20       2975MANAGER       30       2850PRESIDENT     10       5000SALESMAN      30       1400

-- 可以看到不同部門(DEPTNO:10,20,30)的平均年薪水AVG(SAL)是不一樣的。

4)統計匯總:

 SQL> SELECT JOB, DEPTNO, AVG(SAL) FROM EMP GROUP BY CUBE(JOB, DEPTNO) ORDER BY JOB DESC ; JOB       DEPTNO   AVG(SAL)--------- ------ ----------              10 2916.66666              20       2175              30 1566.66666                 2073.21428SALESMAN      30       1400SALESMAN               1400PRESIDENT     10       5000PRESIDENT              5000MANAGER       10       2450MANAGER       20       2975MANAGER       30       2850MANAGER          2758.33333CLERK         10       1300CLERK         20        950CLERK         30        950CLERK                1037.5ANALYST       20       3000ANALYST                3000

---18 rows selected  。。///共有18行結果

我們來看看:group by cube(JOB,DEPTNO) order by JOB desc ; 根據JOB ,DEPTNO進性統計匯總,排列組合如下:

1)JOB,DEPTNO  

2)  JOB

3)DEPTNO

4)去掉JOB和DEPTNO

統計匯總如下:

1)根據JOB,DEPTNO  統計匯總,結果如下:

SALESMAN      30       1400PRESIDENT     10       5000MANAGER       10       2450MANAGER       20       2975MANAGER       30       2850CLERK         10       1300CLERK         20        950CLERK         30        950ANALYST       20       3000

--9 rows selected。。//9行結果。

2)根據JOB統計匯總,結果如下:

SALESMAN               1400PRESIDENT              5000MANAGER                 2758.33333CLERK                       1037.5ANALYST                    3000

。。//共5行被選取。

3)根據DEPTNO統計匯總結果如下:

              10       2916.66666              20       2175              30       1566.66666

。。//共3行被選取。
4)剩下最後一行:

                 2073.21428
。。//剩下最後1行,
為了驗證這個結果是否準確,測試下:
SQL> SELECT AVG(SAL) FROM EMP;   AVG(SAL)----------2073.21428

--//累計9+5+3+1=18與 SELECT JOB, DEPTNO, AVG(SAL) FROM EMP GROUP BY CUBE(JOB, DEPTNO) ORDER BY JOB DESC ;查詢結果相同

GROUP BY CUBE( );通過舉例說明,應該還是很容易理解的。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.