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 操作。
例如以下查询结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
查询语句
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
例如以下查询结果。
查询语句
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
例如以下查询结果:
查询语句
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中出现的某一列
例如以下查询结果:
查询语句
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中出现的列。
查询结果例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
查询语句
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去除反复组
查询结果例如以下:
查询语句
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的更多相关文章
- [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)
原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...
- 高级聚合函数rollup(),cube(),grouping sets()
rollup(),cube(),grouping sets() 上面这几个函数,是对group by分组功能做的功能扩展. a.rollup() 功能:在原结果基础上追加一行总合计记录 ...
- Oracle中group by用法
Oracle中group by用法 在select 语句中可以使用group by 子句将行划分成较小的组,一旦使用分组后select操作的对象变为各个分组后的数据,使用聚组函数返回的是每一个组的汇总 ...
- Oracle分析函数 — sum, rollup, cube, grouping用法
本文通过例子展示sum, rollup, cube, grouping的用法. //首先建score表 create table score( class nvarchar2(20), course ...
- GROUP BY中ROLLUP/CUBE/GROUPING/GROUPING SETS使用示例
oracle group by中rollup和cube的区别: Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句.CUBE ROLLUP 是用于统计数据的. 实验 ...
- oracle中group by的高级用法
简单的group by用法 select c1,sum(c2) from t1 where t1<>'test' group by c1 having sum(c2)>100; ro ...
- oracle 中GROUP BY的用法
转自:http://blog.csdn.net/basenet855x/article/details/6694150 问题: select item.itemnum,item.in1,item.in ...
- oracle 中 group by 加强
group by rollup(a,b) = group by a,b + group by a + group by null SQL> select deptno,job,sum(sal) ...
- oracle中group by 和order by同时存在时
关键点:order by 的栏位必须在group by 中有:例如:select name from TABLE group by name ,id order by id asc
随机推荐
- Mybatis通过接口的方式实现增删改查
导入jar包 [mybatis] [oracle] 生成数据库 1.添加Mybatis的配置文件mybatis-config.xml 在src目录下创建一个mybatis-config.xml文件,如 ...
- 静态分析:IDA逆向代码段说明 text、idata、rdata、data
静态分析:IDA逆向代码段说明 text.idata.rdata.data 通常IDA对一个PE文件逆向出来的代码中, 存在四个最基本的段text.idata.rdata.data, 四个段为PE文件 ...
- UVALive 6319 暴力
思路:直接vector暴力 #include<iostream> #include<vector> #include<cstring> #include<cs ...
- Codeforces Round #321 (Div. 2) B 二分+预处理
B. Kefa and Company time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 洛谷P1175 表达式的转换
P1175 表达式的转换 44通过 147提交 题目提供者该用户不存在 标签云端 难度提高+/省选- 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 这题有毒 抄题解棒责五十! ...
- android基本控件学习-----SeekBar&RatingBar
SeekBar(拖动条)和RatingBar(星级评分条)讲解 一.SeekBar(拖动条) (1)拖动条简单理解就是可以拖动的线,这个对我们来讲很常见,比如视频播放或者音乐播放我们拖动播放的进度,下 ...
- Scrapy学习-22-扩展开发
开发scrapy扩展 定义 扩展框架提供一个机制,使得你能将自定义功能绑定到Scrapy. 扩展只是正常的类,它们在Scrapy启动时被实例化.初始化 注意 实际上自定义扩展和spider中间件. ...
- 关于URL编码 [转]
转自: http://www.ruanyifeng.com/blog/2010/02/url_encoding.html 作者: 阮一峰 日期: 2010年2月11日 一.问题的由来 URL就是网址, ...
- hdu 3579(中国剩余定理+考虑0)
Hello Kiki Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- web前端生成图片之探索踩坑
前段时间,产品和运营整了个非常变态的需求,要求将一个活动页面输出为图片,然后用户进行分享 开始以为是用户自己手动截图分享,没想到后来不是,细思极恐,感叹需求之变态. 从网上找了N个方案,最后确定使用 ...