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 语句实现复杂繁琐的多条select 语句的查询,并且更加的高效。
 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从属子句的运用的更多相关文章

  1. TSQL 分组集(Grouping Sets)

    分组集(Grouping Sets)是多个分组的并集,用于在一个查询中,按照不同的分组列对集合进行聚合运算,等价于对单个分组使用“union all”,计算多个结果集的并集.使用分组集的聚合查询,返回 ...

  2. SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE

    1.创建表 Staff CREATE TABLE [dbo].[Staff]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [Money] [int] NULL, [Cr ...

  3. Grouping Sets:CUBE和ROLLUP从句

    在上一篇文章里我讨论了SQL Server里Grouping Sets的功能.从文中的例子可以看到,通过简单定义需要的分组集是很容易进行各自分组.但如果像从所给的列集里想要有所有可能的分布——即所谓的 ...

  4. SQL Server里Grouping Sets的威力

    在SQL Server里,你有没有想进行跨越多个列/纬度的聚集操作,不使用SSAS许可(SQL Server分析服务).我不是说在生产里使用开发版,也不是说安装盗版SQL Server. 不可能的任务 ...

  5. GROUPING SETS、CUBE、ROLLUP

    其实还是写一个Demo 比较好 USE tempdb IF OBJECT_ID( 'dbo.T1' , 'U' )IS NOT NULL BEGIN DROP TABLE dbo.T1; END; G ...

  6. 介绍一种非常好用汇总数据的方式GROUPING SETS

    介绍 对于任何人而言,用T-SQL语句来写聚会查询都是工作中重要的一环.我们大家也都很熟悉GROUP BY子句来实现聚合表达式,但是如果打算在一个结果集中包含多种不同的汇总结果,可能会比较麻烦.我将举 ...

  7. Hive高级聚合GROUPING SETS,ROLLUP以及CUBE

    scala> import org.apache.spark.sql.hive.HiveContextimport org.apache.spark.sql.hive.HiveContext s ...

  8. GROUP BY中ROLLUP/CUBE/GROUPING/GROUPING SETS使用示例

    oracle group by中rollup和cube的区别: Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句.CUBE ROLLUP 是用于统计数据的. 实验 ...

  9. [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)

    原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...

随机推荐

  1. Ionic2系列——在Ionic2中使用ECharts

    在群里看到有人问怎么在Ionic2中集成ECharts来显示图表.当时答应说写个blog,简单写下步骤. 在TypeScript中如果要使用第三方库,必须要有d.ts,也就是定义文件,没有这个文件的话 ...

  2. Entity Framework 教程——概述

    Entity Framework 基础 本教材将手把手教你使用entity framework,我们将使用entity framework 6.0和visual studio 2012. 以下表格是e ...

  3. bzoj4518--斜率优化DP

    设x[i]为第i天走的路程,s为路程总和,则: ans=[(s/m-x[1])^2+(s/m-x[2])^2+(s/m-x[3])^2+...+(s/m-x[m])^2]*m =[(s-x[1]*m) ...

  4. Linux下安装Hadoop完全分布式(Ubuntu12.10)

    Hadoop的安装非常简单,可以在官网上下载到最近的几个版本,最好使用稳定版.本例在3台机器集群安装.hadoop版本如下: 工具/原料 hadoop-0.20.2.tar.gz Ubuntu12.1 ...

  5. Jmeter3.0发布,版本更新都更新了什么

    Jmeter已发布了3.0,一个大版本的开源测试工具,加入了一些新的特性及软件的改进. Jmeter已隔10年的大版本更新 这是在过去12年里jmeter第一个大版本的更新,jmeter 2.0版本发 ...

  6. Hibernnate延迟加载策略(这么详细你还看不懂)

    好久没有认真写过博客了,今天就好好的写一篇吧!!!!!!!!! 当Hibernate 从数据库中加载某个对象(例如:Dept对象)时,如果同时自动加载所有的关联的某个对象(例如:Emp对象),而程序实 ...

  7. ArcGIS Engine开发前基础知识(2)

    ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutContro ...

  8. Atitit.安全性方案规划设计4gm  v1 q928

    Atitit.安全性方案规划设计4gm  v1 q928 1. 安全架构设计与功能安全检测1 2. https1 3. 账号安全体系1 4. 配置文件安全 1 5. 源码加密与安全2 6. 最高强度的 ...

  9. ListView和Adapter数据适配器的简单介绍

    ListView 显示大量相同格式数据 常用属性: listSelector            listView每项在选中.按下等不同状态时的Drawable divider            ...

  10. 通过安装一个描述文件在控制台获得设备的udid

    在我的这篇博客里面说明了本地获得设备udid的方法,但是只能在模拟器中获得http://www.cnblogs.com/liyy2015/p/6090204.html 当然可以在设备上集成苹果的MDM ...