分析函式的學習
分析函式
[@more@]普通的sql匯總資料:
SQL> SELECT job,sum(sal) from emp group by job
2 union all
3 select '合計' job,sum(sal) from emp;
JOB SUM(SAL)
--------- ----------
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
合計 29025
autot: 6 consistent gets
使用rollup統計函式:
SQL> select nvl(job,'合計') job,sum(sal)
2 from emp
3 group by rollup (job);
JOB SUM(SAL)
--------- ----------
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
合計 29025
autot: 3 consistent gets
從上面的例子我們不難看出使用rollup函式,系統的sql語句更加簡單,耗用的資源更少,從6個consistent gets降到3個consistent gets,如果基表很大的話,結果就可想而知了.
為了介紹cube函式我們再來看看另外一個使用rollup的例子:
1 select deptno,nvl(job,'合計') job,sum(sal)
2 from emp
3 group by rollup (deptno,job)
4* order by deptno
SQL> /
DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 合計 8750
20 ANALYST 6000
20 CLERK 1900
20 MANAGER 2975
20 合計 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 合計 9400
合計 29025
系統只是根據rollup的第一個引數DEPTNO對結果集的資料做了彙總處理,而沒有對JOB做彙總分析處理,cube函式就是為了這個而設計的.
下面,讓我們看看使用cube函式的結果
cube函式的使用:
1 select deptno,nvl(job,'合計') job,sum(sal
2 from emp
3 group by cube (deptno,job)
4* order by deptno
SQL> /
DEPTNO JOB SUM(SAL)
---------- --------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 合計 8750
20 ANALYST 6000
20 CLERK 1900
20 MANAGER 2975
20 合計 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 合計 9400
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
合計 29025
可以看到,在cube函式的輸出結果比使用rollup多出了幾行統計資料.這就是cube函式根據JOB做的彙總統計結果
從上面的結果中我們很容易發現,每個統計資料所對應的行都會出現null,
我們如何來區分到底是根據那個欄位做的彙總呢,
這時候,oracle的grouping函式就粉墨登場了.
如果當前的彙總記錄是利用該欄位得出的,grouping函式就會返回1,否則返回0
EXAMPLE:
1 select decode(grouping(deptno),1,'部門統計',deptno) deptno,
2 decode(grouping(job),1,'職位統計',job) job,
3 sum(sal)
4 from emp
5 group by cube(deptno,job)
6* order by deptno,job
SQL> /
DEPTNO JOB SUM(SAL)
---------------------------------------- --------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
10 職位統計 8750
20 ANALYST 6000
20 CLERK 1900
20 MANAGER 2975
20 職位統計 10875
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
30 職位統計 9400
部門統計 ANALYST 6000
部門統計 CLERK 4150
部門統計 MANAGER 8275
部門統計 PRESIDENT 5000
部門統計 SALESMAN 5600
部門統計 職位統計 29025
可以看到,所有的空值現在都根據grouping函式做出了很好的區分,這樣利用rollup,cube和grouping函式,我們做資料統計的時候就可以輕鬆很多了.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9925929/viewspace-915624/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- spark RDD的學習,filter函式的學習,split函式的學習SparkFilter函式
- 函式的學習函式
- 函式學習函式
- MySQL函式學習(一)-----字串函式MySql函式字串
- JS的學習理解--->函式JS函式
- 函式學習五函式
- 函式學習二函式
- 函式學習四函式
- 函式學習六函式
- 函式學習三函式
- 學習Rust 函式Rust函式
- 深度學習——loss函式的學習筆記深度學習函式筆記
- Python學習之函式Python函式
- 字串函式學習三字串函式
- 字串函式學習二字串函式
- 字串函式學習一字串函式
- TypeScript學習(二)—— 函式TypeScript函式
- numpy學習回顧-數學函式及邏輯函式函式
- 物聯網學習教程—函式引數和函式的值函式
- Java學習隨筆(函式式介面)Java函式
- async函式學習筆記。函式筆記
- 函式 - Go 學習記錄函式Go
- Python學習之zip函式Python函式
- Haskell學習-高階函式Haskell函式
- 學習Scala 方法與函式函式
- 深度學習(啟用函式)深度學習函式
- 生成函式 學習筆記函式筆記
- go語言學習-函式Go函式
- C#學習 數學函式(21)C#函式
- 數學分析 連續函式的孤立零點函式
- jmeter學習指南之常用函式的使用JMeter函式
- 學習筆記:javascript中的Generator函式筆記JavaScript函式
- 字串函式庫的經典使用學習字串函式
- c++ 的學習 建構函式1C++函式
- PHP的Mhash擴充套件函式的學習PHP套件函式
- javascript學習筆記--函式的返回值可以是一個函式JavaScript筆記函式
- PHP 學習總結之函式PHP函式
- Python學習-字串函式操作1Python字串函式
- Python學習-字串函式操作3Python字串函式