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,代码如下:

 1 select  employeeId,null,sum(idealDistAmount)
 2 from businessTarget
 3 group by employeeId
 4 union all
 5 select  null,targetDate,sum(idealDistAmount)
 6 from businessTarget
 7 group by targetDate
 8 union all
 9 select  employeeId,targetDate,sum(idealDistAmount)
10 from businessTarget
11 group by employeeId,targetDate

结果:

 1 employeeId    (无列名)    (无列名)
 2 9058    NULL    10000
 3 9792    NULL    20000
 4 9865    NULL    20000
 5 10091    NULL    20000
 6 10098    NULL    100000
 7 10099    NULL    80000
 8 10100    NULL    80000
 9 10101    NULL    100000
10 10102    NULL    50000
11 10103    NULL    50000
12 10104    NULL    50000
13 10118    NULL    50000
14 10130    NULL    507689
15 10290    NULL    20000
16 10291    NULL    20000
17 NULL    2016-05    1067689
18 NULL    2016-07    60000
19 NULL    2016-08    50000
20 10098    2016-05    100000
21 10099    2016-05    80000
22 10100    2016-05    80000
23 10101    2016-05    100000
24 10102    2016-05    50000
25 10103    2016-05    50000
26 10104    2016-05    50000
27 10118    2016-05    50000
28 10130    2016-05    507689
29 9792    2016-07    20000
30 9865    2016-07    20000
31 10091    2016-07    20000
32 9058    2016-08    10000
33 10290    2016-08    20000
34 10291    2016-08    20000
View Code

如果我们运用grouping sets来指定多个group by 选项,

就可以通过一条select 语句实现复杂繁琐的多条select 语句的查询,并且更加的高效。
1 select  employeeId,targetDate,sum(idealDistAmount)
2 from businessTarget
3 group by
4  grouping sets
5  (
6  (employeeId),
7  (targetDate),
8  (employeeId,targetDate),()
9  )

结果:

 1 employeeId    targetDate    (无列名)
 2 10098    2016-05    100000
 3 10099    2016-05    80000
 4 10100    2016-05    80000
 5 10101    2016-05    100000
 6 10102    2016-05    50000
 7 10103    2016-05    50000
 8 10104    2016-05    50000
 9 10118    2016-05    50000
10 10130    2016-05    507689
11 NULL    2016-05    1067689
12 9792    2016-07    20000
13 9865    2016-07    20000
14 10091    2016-07    20000
15 NULL    2016-07    60000
16 9058    2016-08    10000
17 10290    2016-08    20000
18 10291    2016-08    20000
19 NULL    2016-08    50000
20 NULL    NULL    1177689
21 9058    NULL    10000
22 9792    NULL    20000
23 9865    NULL    20000
24 10091    NULL    20000
25 10098    NULL    100000
26 10099    NULL    80000
27 10100    NULL    80000
28 10101    NULL    100000
29 10102    NULL    50000
30 10103    NULL    50000
31 10104    NULL    50000
32 10118    NULL    50000
33 10130    NULL    507689
34 10290    NULL    20000
35 10291    NULL    20000
View Code

除了grouping sets从属子句,我们还可以运用另外一个从属子句同样可以得到这样的结果,

那就是cube从属子句,代码如下:

1 select  employeeId,targetDate,sum(idealDistAmount)
2 from businessTarget
3 group by
4 cube(employeeId,targetDate)--等同于grouping sets((employeeId),(targetDate),(employeeId,targetDate),())
5 order by employeeId

此三种方法运行得到的结果是一样的。

转载于:https://www.cnblogs.com/kevin-kw/p/6150117.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值