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 ...
随机推荐
- APP 自动化之手势操作appium提供API详解(四)
一.手势操作1.上下左右滑屏 swipe---滑动 java-client 4.x 是有swipe方法的,可以通过传递坐标信息就可以完成滑动androidDriver.swipe(startx, st ...
- VSCode PHP 开发环境配置 详细教程
VSCode PHP 开发环境配置 详细教程 这篇文章主要介绍了VScode+PHPstudy配置PHP开发环境的步骤,整理了官方以及优秀第三方的内容,对于学习和工作有一定借鉴意义. 配置过程 第一步 ...
- C++ 函数模板实现原理剖析
C++ 函数模板实现机制原理剖析 重点 编译器并不是把函数模板处理成能够处理任意类的函数 编译器从函数模板通过具体类型来产生不同的函数 编译器会对函数模板进行两次编译 (1)在声明的位置对模板代码进行 ...
- css 跑马灯加载特效
css 跑马灯加载特效 <!DOCTYPE html> <html lang="en"> <head> <meta charset=
- 3D 穿梭效果?使用 UWP 也能搞定
昨天 ChokCoco 大佬搞了个 3D 穿梭效果出来,具体可见这里: 3D 穿梭效果?使用 CSS 轻松搞定 这个效果太神奇了,他还问我能不能用 WPF 搞出来,因为我完全没用过 WPF 的 3D, ...
- scrapy获取58同城数据
1. scrapy项目的结构 项目名字 项目名字 spiders文件夹 (存储的是爬虫文件) init 自定义的爬虫文件 核心功能文件 **************** init items 定义数据 ...
- Ubuntu軟件商店加載失敗的解決方法
Ubuntu軟件商店有的时候加载不出来,先用下面的试试 sudo apt install python-apt 如果不行,继续下面的方法 打开终端,运行下面的命令: sudo apt-get upda ...
- 使用nacos作为配置中心统一管理配置
基础环境 引入所需依赖包 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>s ...
- 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPushConsumer的实现原理及源码分析
RocketMQ的前提回顾 RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆 ...
- go语言并发编程
引言 说到go语言最厉害的是什么就不得不提到并发,并发是什么?,与并发相关的并行又是什么? 并发:同一时间段内执行多个任务 并行:同一时刻执行多个任务 进程.线程与协程 进程: 进程是具有一定独立功能 ...