oracle中grouping,Oracle中group by 的扩展函数rollup、cube、grouping sets

Oracle的group by除了基本用法以外,还有3种扩展用法,分别是rollup、cube、grouping sets,分别介绍如下:

1、rollup

对数据库表emp,假设其中两个字段名为a,b,c。

如果使用group by rollup(a,b),首先会对(a,b)进行group by ,然后对 a 进行 group by ,最后对全表进行 group by 操作。

如下查询结果:

025d66b0e3fd6de53901869a49dd177a.png

查询语句

Select deptno,job,sum(sal) from emp group by rollup(deptno,job);

等同于

Select deptno,job,sum(sal) from emp group by deptno,job

union all

Select deptno,null sum(sal) from emp group by deptno

union all

Select null,null,sum(sal) from emp (group by null )

2、cube

如果使用group by cube(a,b),,则首先会对(a,b)进行group by,然后依次是(a),(b),最后对全表进行group by 操作,一共是2^2=4次grouping

如下查询结果;

79fd44765dfa75efbd239efce45e61ee.png

查询语句

Select deptno,job,sum(sal) from emp group by cube(deptno,job);

等同于

Select deptno,job,sum(sal) from emp group by deptno,job

union all

Select deptno,null sum(sal) from emp group by deptno

union all

Select null,job, sum(sal) from emp group by job

union all

Select null,null,sum(sal) from emp (group by null )

3、grouping sets

grouping sets就是对参数中的每个参数做grouping,如果使用group by grouping sets(a,b),则对(a),(b)进行group by

如下查询结果:

3137651790a8b1962afb0b9d71ac5734.png

查询语句

Select deptno,job,sum(sal) from emp group by cube(deptno,job);

等同于

select null,job,sum(sal) from emp group by job

union all

select deptno,null,sum(sal) from emp group by deptno

4、grouping

使用grouping可以判断该行是数据库中本来的行,还是有统计产生的行,grouping值为0时说明这个值是数据库中本来的值,为1说明是统计的结果,参数只有一个,而且必须为group by中出现的某一列

如下查询结果:

9f8761d8d301a5811f25c29a29afd662.png

查询语句

select deptno,job,sum(sal),grouping(deptno) a,grouping(job) b from emp group by rollup(deptno,job);

5、grouping_id

Grouping_id()的返回值其实就是参数中的每列的grouping()值的二进制向量,如果grouping(a)=1,grouping(b)=1,则grouping_id(A,B)的返回值就是二进制的11,转成10进制就是3。参数可以是多个,但必须为group by中出现的列。

查询结果如下:

2cfb5b3127279283fd45a7af33f4d964.png

查询语句

select deptno,job,sum(sal),grouping(deptno) a,grouping(job) b,grouping_id(deptno,job) from emp group by rollup(deptno,job);

6、group_id

GROUP_ID()唯一标识重复组,可以通过group_id去除重复组

查询结果如下:

4d96319be1cc1089f93493465469ee5a.png

查询语句

select deptno,job,sum(sal),group_id() from emp group by deptno, rollup(deptno,job) having group_id()=0;

版权声明:本文为博主原创文章,未经博主允许不得转载。

Oracle中group by 的扩展函数rollup、cube、grouping sets

标签:group by   rollup   cube   grouping sets   oracle

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:http://blog.csdn.net/afei3418/article/details/47615625

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值