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/git