rollup()函式、cube()函式--通常與group by 子句一起使用,根據維度在分組後進行聚合操作
--應用場景:為每個分組返回乙個小計,同時為所有分組返回總計
select ename,deptno,sum(sal) from emp group
byrollup(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
byrollup(deptno,ename);
--grouping_id():必須接受一列或多列做為其引數。返回值為按引數排列順序,依次對各個引數使用grouping()函式,
--並將結果值依次串成一串二進位制數然後再轉化為十進位製所得到的值
select ename,deptno,sum(sal),grouping_id(deptno,ename) from emp group
byrollup(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
bygrouping sets (deptno,ename);
oracle分組函式rollup,cube
oracle分組函式rollup,cube rollup 欄位1,欄位2 cube 欄位1,欄位2 rollup col1,col2,和 cube col1,col2,用法區別在 cube 在 rollup 彙總的記錄集上,還會增加對 col2 等字段的彙總 www.2cto.com rollup只...
分析函式之keep函式
一 keep函式介紹 keep是oracle下的另乙個分析函式,他的用法不同於通過over關鍵字指定的分析函式,可以用於這樣一種場合下 取同乙個分組下以某個字段排序後,對指定欄位取最小或最大的那個值。從這個前提出發,我們可以看到其實這個目標通過一般的row number分析函式也可以實現,即指定rn...
Oracle 之常用分析函式
oracle自帶功能強大的分析函式,剛接觸了好幾個,才知道原來寫的一些sql完全可以簡化,相見恨晚吶!下面將介紹幾個排名的函式。row number rank dense rank row number可以通過over 根據某欄位排序完之後進行組內 如果有partition by 排序。rank 是...