视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
oracle--rollup和cube分组累计求和
2020-11-09 09:42:57 责编:小采
文档


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)

执行结果:

***

使用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(....)<=1

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)<=1

执行结果:

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

执行结果:

下载本文
显示全文
专题