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/