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:对各个部门中的员工的工资、人数进行分组累计统计。
最新文章
- Xamarin.Android之ActionBar与菜单
- DirectoryEntry配置IIS出现ADSI Error:未知错误(0x80005000)
- 完整的站内搜索Demo(Lucene.Net+盘古分词)
- hibernate_validator_07
- ruby on rails出现的问题ActiveModel::ForbiddenAttributesError
- osc搜索引擎框架search-framework,TngouDB,gso,
- Windows 8.1下 MySQL绿色版安装配置与使用
- 检查Linux Bash安全漏洞以及各环境修复解决方法
- iOS 自定义导航栏笔记
- jsp中的动作标签
- uncaught syntaxerror: unexpected token
- procotol.go 源码阅读
- 初始IP协议
- Fluent动网格【2】:Profile文件
- English trip V1 - 20.Look at me 看着我 Teacher:Solo Key: 声调(英语默认就声调[rising]和降调[falling]两种)
- Java8新特性值Lambda --->;匿名函数
- Python3 round() 函数
- mybatis一对多关联查询——(九)
- 一个CSS3滤镜Drop-shadow阴影效果
- HDU 4417 Super Mario(划分树)
热门文章
- ansible模块及语法
- 某企业桌面虚拟化项目-Citrix虚拟桌面解决方案
- 写给初学者的Linux errno 错误码机制
- Django笔记&教程 0-2 框架版本与相关工具
- OpenShift S2I 概念及流程
- Centos8 部署 ElasticSearch 集群并搭建 ELK,基于Logstash同步MySQL数据到ElasticSearch
- 测试平台系列(79) 编写Redis配置功能(下)
- Java设计模式之(十一)——享元模式
- 洛谷 P7450 - [THUSCH2017] 巧克力(斯坦纳树+随机化)
- Codeforces 1383C - String Transformation 2(找性质+状压 dp)