首頁 > 資料庫 > mysql教程 > oracle--rollup 和cube分组累计求和

oracle--rollup 和cube分组累计求和

WBOY
發布: 2016-06-07 17:57:58
原創
1167 人瀏覽過

group by 语句支持基本的having条件,还支持rollup和cube提供信息汇总功能,类似小计。 rollup:纵向小计,从右向左逐个对每一列进行小结并在结果中生成独立的一行。只返回第一个分组条件指定的列的统计行。 cube:横行小计 selectd.deptno,t.job,sum(t.sal)

group by 语句支持基本的having条件,还支持rollup和cube提供信息汇总功能,类似小计。

rollup:纵向小计,从右向左逐个对每一列进行小结并在结果中生成独立的一行。只返回第一个分组条件指定的列的统计行。

cube:横行小计

  1. select d.deptno,t.job,sum(t.sal) from emp t,dept d   
  2. where t.deptno=d.deptno   
  3. group by rollup(d.deptno,t.job)  

执行结果:

oracle--rollup 和cube分组累计求和

***

使用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

 

此时要求不显示最后总计行:

  1. select d.deptno,t.job,sum(t.sal) from emp t,dept d   
  2. where t.deptno=d.deptno   
  3. group by rollup(d.deptno,t.job)having grouping_id(d.deptno,t.job)

执行结果:

oracle--rollup 和cube分组累计求和

实际情况中要展示结果集中汇总列加上小计和合计,此时这样处理:

执行结果:

oracle--rollup 和cube分组累计求和

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板