分析函式的學習
分析函式
[@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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分析函式rollup||cube學習函式
- 分析函式(學習筆記)函式筆記
- 分析函式學習1 level函式
- 分析函式connect by | start with學習函式
- spark RDD的學習,filter函式的學習,split函式的學習SparkFilter函式
- 函式的學習函式
- oracle學習筆記8: 分析函式Oracle筆記函式
- 分析函式學習3 ROW_NUMBER函式
- 函式學習函式
- 【Mysql 學習】日期函式函式MySql函式
- 【SQL 學習】分析函式之RANK() DENSE_RANK ()SQL函式
- 分析函式學習2 SYS_CONNECT_BY_PATH函式
- MySQL函式學習(一)-----字串函式MySql函式字串
- JS的學習理解--->函式JS函式
- 函式學習五函式
- 函式學習六函式
- 函式學習三函式
- 函式學習四函式
- 函式學習二函式
- 學習Rust 函式Rust函式
- 學習dump函式函式
- ORACLE函式學習Oracle函式
- 深度學習——loss函式的學習筆記深度學習函式筆記
- 字串函式學習三字串函式
- 字串函式學習一字串函式
- 字串函式學習二字串函式
- TypeScript學習(二)—— 函式TypeScript函式
- js學習二函式JS函式
- 【Mysql 學習】流程函式MySql函式
- 關於SQLServer2005的學習筆記——分析函式SQLServer筆記函式
- numpy學習回顧-數學函式及邏輯函式函式
- 我的MYSQL學習心得(6) : 函式MySql函式
- Java學習隨筆(函式式介面)Java函式
- 函式 - Go 學習記錄函式Go
- async函式學習筆記。函式筆記
- Haskell學習-高階函式Haskell函式
- 學習Scala 方法與函式函式
- Python學習之函式Python函式