group by 語句支持基本的having條件,還支持rollup和cube提供信息匯總功能,類似小計。 rollup:縱向小計,從右向左逐個對每一列進行小結并在結果中生成獨立的一行。只返回第一個分組條件指定的列的統計行。 cube:橫行小計 selectd.deptno,t.job,sum(t.sal)
group by 語句支持基本的having條件,還支持rollup和cube提供信息匯總功能,類似小計。
rollup:縱向小計,從右向左逐個對每一列進行小結并在結果中生成獨立的一行。只返回第一個分組條件指定的列的統計行。
cube:橫行小計
- select?d.deptno,t.job,sum(t.sal)?from?emp?t,dept?d ??
- where?t.deptno=d.deptno ??
- group?by?rollup(d.deptno,t.job)??
執行結果:
***
使用grouping_id顯示指定的分組級別的記錄。返回grouping()位向量的十進制值,GROUPING位向量的計算方法是將按照順序對每一列調用GROUPING函數的結果組合起來。
例:grouping_id(a,b,c),a為空就是0非空為1,b和c也一樣,結果會得到一個三位數,用二進制轉換成十進制就是了,a,b,c全是非空,即111就是7,三列就是7,如果是兩列自然是11就是3
select … from 表 group by rollup(…..) having grouping_id(….)
?
rollup(x,y)2列 | rollup(x,y,z)3列 |
總計是grouping_id=3 | 總計是grouping_id=7 |
小計grouping_id=1 | 小計grouping_id=3 |
記錄是grouping_id=0 | 記錄是grouping_id=0 |
?
此時要求不顯示最后總計行:
- select?d.deptno,t.job,sum(t.sal)?from?emp?t,dept?d ??
- where?t.deptno=d.deptno ??
- group?by?rollup(d.deptno,t.job)having?grouping_id(d.deptno,t.job)
執行結果:
實際情況中要展示結果集中匯總列加上小計和合計,此時這樣處理:
執行結果:
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END