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学习(七)
今天讲师又讲了一个多小时类的注意点,例如书写格式什么的,这些我c++中都学过了,所以很快看完. 然后又讲了IDE,我选择的是IntelliJ IDEA. 刚开始官网登不上去,花了一个小时,从网上翻了各 ...
- C# 复制目录及其下文件
public static void CopyDirectory(string sourceDirPath, string saveDirPath) { try { if (!Directory.Ex ...
- python读写文件with open
简介 使用python的过程中肯定少不了读取文件的操作, 传统的形式是使用 直接打开.然后在操作.然后再关闭, 这样代码量稍微大些不说,一旦在操作步骤中出现报错,则无法进行文件的关闭: 案例一(读取) ...
- [bzoj1416]神奇的口袋
容易发现操作任意次并不会改变每一个点的概率(因为每一个点加d的概率相同,期望与原数成比例),然后直接输出即可(要用高精度) 1 #include<bits/stdc++.h> 2 usin ...
- [nowcoder5668J]Operating on the Tree
考虑令$a_{i}$为i的位置,$p_{i}=0/1$表示第i个点的贡献,那么$p_{x}=0$当且仅当存在与其相邻的点$y$满足$a_{y}<a_{x}$且$p_{y}=1$ 树形dp,定义状 ...
- [luogu5204]Train Tracking 2
考虑一个位置的上界,即$bi=min(c_{i-k+1},c_{i-k+2},--,ci)$,那么每一个位置有两种方式:1.达到上界:2.未达到上界那么可以将权值相同的ci和bi提出来,由于权值不同的 ...
- 初识XSS攻击
初识XSS攻击 本文参考于<白帽子讲Web安全>第3章跨站脚本攻击(XSS),该书出版于2014年,因而现在可能存在一些新场景或新技术而未被提及,但本文对学习和了解XSS攻击仍具有重要价值 ...
- java 装饰器模式实现代码
目录 1.实现装饰器模式 1.1.公共接口 1.2.接口实现 1.3.装饰器 1.4.装饰构件 1.5.测试装饰器 上图展示的是io流中的一个装饰者模式的代码结构 1.实现装饰器模式 汽车厂生产汽车实 ...
- Atcoder Regular Contest 125 E - Snack(最小割转化+贪心)
Preface: 这是生平第一道现场 AC 的 arc E,也生平第一次经历了 performance \(\ge 2800\),甚至还生平第一次被 hb 拉到会议里讲题,讲的就是这个题,然鹅比较尬 ...
- Break up CF700C
Break up CF700C 首先考虑只能删一条边的做法,我们可以找出所有的桥,然后随便跑一条 S 到 T 路径,如果这条路径上有桥就说明可以,否则不行 发现这个做法其实是 O(M) 的 那么可以先 ...