grouping sets从属子句的运用
grouping sets主要是用来合并多个分组的结果。
对于员工目标业绩表‘businessTarget’:
employeeId targetDate idealDistAmount
10098 2016-05 100000
10099 2016-05 80000
10100 2016-05 80000
10101 2016-05 100000
10102 2016-05 50000
10103 2016-05 50000
10104 2016-05 50000
10118 2016-05 50000
10130 2016-05 507689
10091 2016-07 20000
10290 2016-08 20000
10291 2016-08 20000
9058 2016-08 10000
9792 2016-07 20000
9865 2016-07 20000
如果需要分别对上表employeeId,targetDate,(employeeId,targetDate)分别进行group by,代码如下:
select employeeId,null,sum(idealDistAmount)
from businessTarget
group by employeeId
union all
select null,targetDate,sum(idealDistAmount)
from businessTarget
group by targetDate
union all
select employeeId,targetDate,sum(idealDistAmount)
from businessTarget
group by employeeId,targetDate
结果:
employeeId (无列名) (无列名)
9058 NULL 10000
9792 NULL 20000
9865 NULL 20000
10091 NULL 20000
10098 NULL 100000
10099 NULL 80000
10100 NULL 80000
10101 NULL 100000
10102 NULL 50000
10103 NULL 50000
10104 NULL 50000
10118 NULL 50000
10130 NULL 507689
10290 NULL 20000
10291 NULL 20000
NULL 2016-05 1067689
NULL 2016-07 60000
NULL 2016-08 50000
10098 2016-05 100000
10099 2016-05 80000
10100 2016-05 80000
10101 2016-05 100000
10102 2016-05 50000
10103 2016-05 50000
10104 2016-05 50000
10118 2016-05 50000
10130 2016-05 507689
9792 2016-07 20000
9865 2016-07 20000
10091 2016-07 20000
9058 2016-08 10000
10290 2016-08 20000
10291 2016-08 20000
如果我们运用grouping sets来指定多个group by 选项,
select employeeId,targetDate,sum(idealDistAmount)
from businessTarget
group by
grouping sets
(
(employeeId),
(targetDate),
(employeeId,targetDate),()
)
结果:
employeeId targetDate (无列名)
10098 2016-05 100000
10099 2016-05 80000
10100 2016-05 80000
10101 2016-05 100000
10102 2016-05 50000
10103 2016-05 50000
10104 2016-05 50000
10118 2016-05 50000
10130 2016-05 507689
NULL 2016-05 1067689
9792 2016-07 20000
9865 2016-07 20000
10091 2016-07 20000
NULL 2016-07 60000
9058 2016-08 10000
10290 2016-08 20000
10291 2016-08 20000
NULL 2016-08 50000
NULL NULL 1177689
9058 NULL 10000
9792 NULL 20000
9865 NULL 20000
10091 NULL 20000
10098 NULL 100000
10099 NULL 80000
10100 NULL 80000
10101 NULL 100000
10102 NULL 50000
10103 NULL 50000
10104 NULL 50000
10118 NULL 50000
10130 NULL 507689
10290 NULL 20000
10291 NULL 20000
除了grouping sets从属子句,我们还可以运用另外一个从属子句同样可以得到这样的结果,
那就是cube从属子句,代码如下:
select employeeId,targetDate,sum(idealDistAmount)
from businessTarget
group by
cube(employeeId,targetDate)--等同于grouping sets((employeeId),(targetDate),(employeeId,targetDate),())
order by employeeId
此三种方法运行得到的结果是一样的。
grouping sets从属子句的运用的更多相关文章
- TSQL 分组集(Grouping Sets)
分组集(Grouping Sets)是多个分组的并集,用于在一个查询中,按照不同的分组列对集合进行聚合运算,等价于对单个分组使用“union all”,计算多个结果集的并集.使用分组集的聚合查询,返回 ...
- SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE
1.创建表 Staff CREATE TABLE [dbo].[Staff]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [Money] [int] NULL, [Cr ...
- Grouping Sets:CUBE和ROLLUP从句
在上一篇文章里我讨论了SQL Server里Grouping Sets的功能.从文中的例子可以看到,通过简单定义需要的分组集是很容易进行各自分组.但如果像从所给的列集里想要有所有可能的分布——即所谓的 ...
- SQL Server里Grouping Sets的威力
在SQL Server里,你有没有想进行跨越多个列/纬度的聚集操作,不使用SSAS许可(SQL Server分析服务).我不是说在生产里使用开发版,也不是说安装盗版SQL Server. 不可能的任务 ...
- GROUPING SETS、CUBE、ROLLUP
其实还是写一个Demo 比较好 USE tempdb IF OBJECT_ID( 'dbo.T1' , 'U' )IS NOT NULL BEGIN DROP TABLE dbo.T1; END; G ...
- 介绍一种非常好用汇总数据的方式GROUPING SETS
介绍 对于任何人而言,用T-SQL语句来写聚会查询都是工作中重要的一环.我们大家也都很熟悉GROUP BY子句来实现聚合表达式,但是如果打算在一个结果集中包含多种不同的汇总结果,可能会比较麻烦.我将举 ...
- Hive高级聚合GROUPING SETS,ROLLUP以及CUBE
scala> import org.apache.spark.sql.hive.HiveContextimport org.apache.spark.sql.hive.HiveContext s ...
- GROUP BY中ROLLUP/CUBE/GROUPING/GROUPING SETS使用示例
oracle group by中rollup和cube的区别: Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句.CUBE ROLLUP 是用于统计数据的. 实验 ...
- [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)
原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...
随机推荐
- session的使用方法详解
session的使用方法详解 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器 ...
- spring aop注解方式与xml方式配置
注解方式 applicationContext.xml 加入下面配置 <!--Spring Aop 启用自动代理注解 --> <aop:aspectj-autoproxy proxy ...
- entityframework学习笔记--007-实体数据建模基础之继承关系映射TPT
Table per Type Inheritance (TPT)建模 1.假设你有两张表与一张公共的表密切相关,如图7-1所示,Businiss表与eCommerce表.Retail表有1:0...1 ...
- 五个典型的 JavaScript 面试题
阅读原文 在IT界,需要大量的 JavaScript 开发者.如果你的能力能够胜任这一角色,那么你将获得许多更换工作和提高薪水的机会.但是在你被公司录取之前,你需要展现你的技术实力,以便通过面试环节. ...
- HTML5新特性之Mutation Observer
Mutation Observer(变动观察器)是监视DOM变动的接口.当DOM对象树发生任何变动时,Mutation Observer会得到通知. 要概念上,它很接近事件.可以理解为,当DOM发生变 ...
- [译]为什么我要离开gulp和grunt转投npm脚本的怀抱
原文链接:https://medium.freecodecamp.com/why-i-left-gulp-and-grunt-for-npm-scripts-3d6853dd22b8#.n7m1855 ...
- Linux下安装JDK和Eclipse
安装步骤: (1)下载JDK (jdk-8u20-linux-x64.tar.gz) (2)卸载系统自带的开源JDK rpm -qa |grep java rpm –e java (3) ...
- 在 ASP.NET CORE 中使用 SESSION
Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件.在本文中我将会简单介绍一下 ASP.NET Core 中的 Session ...
- node.js+socket.io配置详解
由于我是在win7的环境下,在这里就以win7系统为例进行讲解了. 首先需要在nodejs官网下载最新版的node.js,下载完毕直接安装即可,安装成功后在cmd命令行中执行node指令,如下结果就说 ...
- 关于iPhone图片的问题。
由于iOS设备的屏幕分辨率不尽相同,有大有小,那么在不同设备中显示同一张图片,可能会造成图片被拉伸.变形,严重影响用户体验.为了让图片在不同设备中都能得到很好的显示效果,同一类图片我们一般会准备几种版 ...