分析函數之rollup、cube函數


rollup()函數、cube()函數

--通常與group by 子句一起使用,根據維度在分組后進行聚合操作
--應用場景:為每個分組返回一個小計,同時為所有分組返回總計
select ename,deptno,sum(sal) from emp group by rollup(deptno,ename);
--rollup和cube獨立考慮每一列再決定其必須計算小計,對rollup()而言,通過列表來確定分組,
--而cube函數則對每種可能的列組合分組


rollup()輔助函數:往往是為了過濾掉一部分統計數據,而達到美化統計結果的作用。

--grouping():必須接受一列且只能接受一列做為其參數。參數列值為空返回1,參數列值非空返回0。(即如果參數的列的值在rollup中,則返回1;否則返回0)
select ename,deptno,sum(sal),grouping(ename),grouping(deptno) from emp group by rollup(deptno,ename);

--grouping_id():必須接受一列或多列做為其參數。返回值為按參數排列順序,依次對各個參數使用grouping()函數,
--並將結果值依次串成一串二進制數然后再轉化為十進制所得到的值
select ename,deptno,sum(sal),grouping_id(deptno,ename) from emp group by rollup(deptno,ename);
例如:grouping(a) = 0 ; grouping(b) = 1;
則:grouping_id(a,b) = (01)2 =0*2^1+1*2^0= 1;
grouping_id(b,a) = (10)2 =1*2^1+0*2^0=2;

--group_id()函數:調用時不需要且不能傳入任何參數。返回值為某個特定的分組出現的重復次數(第一大點中的第3種情況中往往會產生重復的分組)。
--重復次數從0開始,例如某個分組第一次出現則返回值為0,第二次出現時返回值為1,……,第n次出現返回值為n-1。可用來去重

grouping sets()函數:指定感興趣的分組,減少計算整個維度的消耗
select deptno,ename,sum(sal)from emp group by grouping sets (deptno,ename);

 原文鏈接:https://lanjingling.github.io/2015/10/09/oracle-fenxihanshu-1/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM