分析函數之rollup、cube函數

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

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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章