oracle中分组中的ROLLUP和CUBE选项
在进行多列分组统计时,如果直接使用GROUP BY子句指定分组列,则只能生成基于所有分组列的统计结果。如果在GROUP BY子句中使用ROLLUP语句或CUBE语句,除了生成基于所有指定列的分组统计外,还可以生成基于指定列不同子集的统计结果。
使用ROLLUP选项,除了生成基于所有指定列的分组统计外,还对指定的分组列从左开始的每个子集进行统计。例如,GROUP BY ROLLUP(A,B,C)形成的统计包括以下内容。
❑GROUP BY():不基于任何列的整个查询结果的统计。
❑GROUP BY A:基于A列的分组统计。
❑GROUP BY A,B:基于A、B两列的分组统计。
❑GROUP BY A,B,C:基于A、B、C三列的分组统计。
使用CUBE选项,除了生成基于所有指定列的分组统计外,还对指定分组列的所有子集进行统计。例如,GROUP BY CUBE(A,B,C)形成的统计包括以下内容。
❑GROUP BY():不基于任何列的整个查询结果的统计。
❑GROUP BY A:基于A列的分组统计。
❑GROUP BY B:基于B列的分组统计。
❑GROUP BY C:基于C列的分组统计。
❑GROUP BY A,B:基于A、B两列的分组统计。
❑GROUP BY A,C:基于A、C两列的分组统计。
❑GROUP BY B,C:基于B、C两列的分组统计。
❑GROUP BY A,B,C:基于A、B、C三列的分组统计。
例29:查询10、20、30的各个部门中各个职位的平均工资、每个部门的平均工资和所有员工的平均工资。查询结果的形式如表30-3所示。



例30:查询10、20、30的各个部门中各个职位的平均工资、每个部门的平均工资、每个职位的平均工资和所有员工的平均工资。查询结果的形式如表30-4所示。


为了了解每个统计结果是基于哪些列统计而来的,可以使用GROUPING函数,函数返回值为1时,表示该列没有参与统计;函数返回值为0时,表示该列参与了统计。
例31:查询10、20、30的各个部门中各个职位的平均工资、每个部门的平均工资、每个职位的平均工资和所有员工的平均工资,显示每个统计结果是基于哪些列进行的。


7.合并分组查询
在Oracle 11g中,可以将几个单独的分组查询合并成一个分组查询。合并分组查询需要在GROUP BY子句中使用GROUPING SETS选项。
例32:查询各个部门的平均工资和各个职位的平均工资。

GROUPING SETS语句的作用就是使用一个语句得到多个分组统计的结果集。要注意嵌套列与非嵌套列的区别。嵌套列与单个GROUP BY语句作用相同;非嵌套列相当于将多个单独的GROUP BY语句查询结果,采用UNION ALL方式的合并起来。
❑GROUP BY GROUPING SETS((A,B,C)):等价于GROUP BY A,B,C。
❑GROUP BY GROUPING SETS(A,B,C):等价于GROUP BY A UNION ALL GROUPBY B UNION ALL GROUP BY C。
❑GROUP BY GROUPING SETS(A,(B,C)):等价于GROUP BY A UNION ALL GROUPBY B,C。
30.2.4 累计统计查询
在执行统计查询时,可以将聚集函数与OVER函数相结合,进行总体累计统计查询或分组累计统计查询。
1.总体累计统计
总体累计统计的每一个统计结果都是针对之前的所有记录进行的,在OVER函数中使用ORDER BY语句指定统计的顺序,如果不指定ORDER BY语句,则不进行累计统计。
例33:对员工的工资、人数进行总体累计统计。

由统计结果可以看出,累计统计的第一个统计结果是针对第一条记录进行的;第二个统计结果是针对前两条记录进行的;第三个统计结果是针对前三条记录进行的,以此类推。
2.分组累计统计
如果在进行累计统计时,需要按组进行,则需要使用PARTITION子句指定累计统计的分组列。
例34:对各个部门中的员工的工资、人数进行分组累计统计。

oracle中分组中的ROLLUP和CUBE选项的更多相关文章
- SQL 中GROUP BY 、ROLLUP、CUBE 关系和区别
转自:http://www.cnblogs.com/dyufei/archive/2009/11/12/2573974.html 不言自明,看SQL就完全理解了,不需要过多解释,不错,分享之: ROL ...
- ORACLE的分组统计之ROLLUP(一)
Oracle 9i以后,扩展了group by 的功能,能够满足大部分多维数据的分析统计功能,主要表现: 1. rollup,cube,grouping sets 扩展group by字句提供了丰富的 ...
- [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)
原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...
- SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE
1.创建表 Staff CREATE TABLE [dbo].[Staff]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [Money] [int] NULL, [Cr ...
- oracle group by中cube和rollup字句的使用方法及区别
oracle group by中rollup和cube的区别: Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句. 如果是ROLLUP(A, B, C)的话,先 ...
- Oracle 中运用rollup和cube实现汇总运算
前言.看了很多的随笔博文内容都是关于rollup和cube的用法,发现一个问题,很多都是一样或者转载的,但这都不是重点,重点是,他们写的都太专业化了,直接给一个结论,并没有给出整个推理出这个结论的过程 ...
- Oracle中group by 的扩展函数rollup、cube、grouping sets
Oracle的group by除了基本使用方法以外,还有3种扩展使用方法,各自是rollup.cube.grouping sets.分别介绍例如以下: 1.rollup 对数据库表emp.如果当中两个 ...
- SQLSERVER中的ALL、PERCENT、CUBE关键字、ROLLUP关键字和GROUPING函数
SQLSERVER中的ALL.PERCENT.CUBE关键字.ROLLUP关键字和GROUPING函数 先来创建一个测试表 USE [tempdb] GO )) GO INSERT INTO [#te ...
- Oracle的rollup、cube、grouping sets函数
转载自:https://blog.csdn.net/huang_xw/article/details/6402396 Oracle的group by除了基本用法以外,还有3种扩展用法,分别是rollu ...
随机推荐
- 【java+selenium3】模态框处理(五)
一.模态框的定义: 模态对话框(Modal Dialogue Box , 又叫做模式对话框),是指在用户想要对话框以外的应用程序进行操作时候,必须先对该对话框进行响应.如单击[确定]或者[返回]按钮等 ...
- 事件消息生产消费中间件-OSS.DataFlow
系统重构解耦的过程涉及不同领域服务分拆,或同一服务下实时响应部分和非响应部分分拆,分解后的各部分通过异步消息的流转传递,完成整体的业务逻辑,但是频繁的在业务层面直接调用不同消息队列的SDK,个人感觉不 ...
- rocketmq广播消息的(五)
一.简介 广播消费指的是:一条消息被多个consumer消费,即使这些consumer属于同一个ConsumerGroup,消息也会被ConsumerGroup中的每个Consumer都消费一次,广播 ...
- Java核心技术--Java程序设计
Java术语 术语名 缩写 解释 Java Development Kit(Java开发工具包) JDK 编写Java程序的程序员使用的软件 Java Runtime Environment(Java ...
- Java包装类,以及Integer与int之间的比较
一.Java的基本类型 Java语言中提供了八种基本类型,包括六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型. 整数型,包括byte.short.int.long,默认初始值是0 ...
- [bzoj1738]发抖的牛
二分答案,每一头牛向所有在规定时间内能走到的牛棚连inf的边,每一个源点向牛连牛数量的边,每一个牛棚向汇点连牛棚容量的边,能满流则意味着这个答案可行,否则不可行. 1 #include<bits ...
- [loj3504]支配
令$S_{x}$表示$x$支配的节点集合,可以暴力枚举$x$并求出$S_{x}$(删去$x$后从1开始dfs,复杂度为$o(nm)$),进而反过来即可求出受支配集$D_{x}$ 结论1:若$z\in ...
- [bzoj1082]栅栏
先二分答案,然后搜索暴力判断由于数据范围较大,需要剪枝:1.当前所有可能被用到的木板长度和(长度要不小于最小所需长度)>=所要拼成的所有木板的和:2.对于需求从大到小枚举木板(这样一开始枚举次数 ...
- Codeforces 710F - String Set Queries(AC 自动机)
题面传送门 题意:强制在线的 AC 自动机. \(n,\sum|s|\leq 3\times 10^5\) 如果不是强制在线那此题就是道 sb 题,加了强制在线就不那么 sb 了. 这里介绍两种做法: ...
- 洛谷 P5280 - [ZJOI2019]线段树(线段树+dp,神仙题)
题面传送门 神仙 ZJOI,不会做啊不会做/kk Sooke:"这八成是考场上最可做的题",由此可见 ZJOI 之毒瘤. 首先有一个非常显然的转化,就是题目中的"将线段树 ...