oracle中group by的高級用法


簡單的group by用法

 

select c1,sum(c2)
from t1
where t1<>'test'
group by c1
having sum(c2)>100;

 

 rollup(多列)——上卷匯總,從最后一個匯總字段開始上卷匯總,一直到合計

select c1,c2,sum(c3)
from t1
group by rollup(c1,c2)

 含義:
c1,c2分組合計
c1分組合計
總計

cube(多列)——組合匯總,以匯總字段的子集作為匯總條件匯總,包括合計

select c1,c2,sum(c3)
from t1
group by cube(c1,c2)

 含義:
c1,c2分組合計
c1分組合計
c2分組合計
總計

grouping(單列名)只用於rollup和cube,單列名是rollup和cube中的一個列名,表示此記錄的分組條件是否包含此列,1表示否,0表示是。

select decode(grouping(c1),1,'all c1',c1) as first,
decode(grouping(c2),1,'all c2',c2) as second,sum(c3)
from t1
group by cube(c1,c2)

 含義:使記錄含義更清晰,而不是單純的一個null值。

grouping sets(多列)——分列匯總,按參數中的各列分別匯總。

select c1,c2,sum(c3)
from t1
group by grouping sets(c1,c2)

 含義:按c1和c2的分別作為group by的條件

grouping_id(多列)
是grouping()的擴展,相當於grouping_id(c1,c2)=(grouping(c1)||grouping(c2)表示的二進制)的值
可以表示分組的層級

group by語句可以同時使用普通列、rollup()和cube()等作為條件,如果一個列在不同地方出現了多次,結果集可以會重復。同時使用的含義是:普通列加上高級函數的每個結果作為group by的條件匯總,

group_id()函數,無參數,可以表示此分組記錄是否重復,0表示第一次,1表示重復。

感覺很實用!!!以后項目中可以用用。。。

 


免責聲明!

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



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