首先引用ITPUB上的总结:

rollup(a,b,c)----------------> 从右到底递减汇总
====>group by a,b,c   (减0次)
UNION ALL
====>group by a,b     (减1次)
UNION ALL
====>group by a       (减2次)
UNION ALL
====>group by null(全部汇总) (全部减掉)

移动了4次,所以有4个级别的汇总,列移动的顺序就是从右到左的,3个列的rollup就有4个group by汇总
这个总结简单明了。

一、group by 后带rollup子句所产生的效果
group by 后 带 rollup 子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据(至于统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数)。因此要搞懂group by 后带rollup子句的用法主要是搞懂它是如何按一定的规则产生多种分组的。另group by后带 rollup 子句所返回的结果 
集,可以理解为各个分组所产生的结果集的并集且没有去掉重复数据。
1、对比没有带rollup 的goup by
例:Group by A,B
产生的分组种数:1种;
即group by A,B
返回结果集:也就是这一种分组的结果集。

2、带rollup但group by与rollup之间没有任何内容
例1:Group by rollup(A,B)
产生的分组种数:3 种;
第一种:group by A,B
第二种:group by A
第三种:group by NULL
(说明:本没有group byNULL的写法,在这里指是为了方便说明,而采用之。含义是:没有分组,也就是所有数据做一个统计。例如聚合函数是SUM的话,那就是对所有满足条件的数据进行求和。此写法的含义下同)
返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。

例2:Group by rollup(A,B,C)
产生的分组种数:4 种;
第一种:group by A,B,C
第二种:group by A,B
第三种:group by A
第四种:group by NULL
返回结果集:为以上四种分组统计结果集的并集且未去掉重复数据。

3、带rollup但group by与rollup之间还包含有列信息
例1:Group by A , rollup(A ,B)
产生的分组种数:3 种;
第一种:group by A,A,B 等价于 group by A,B
第二种:group by A,A    等价于 group by A
第三种:group by A,NULL  等价于 group by A
返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。

例2:Group by C,rollup(A,B)
产生的分组种数:3 种;
第一种:group by C,A,B

第二种:group by C,A

第三种:group by C,NULL 等价于 group by C
返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。

4、带rollup且rollup子句括号内又使用括号对列进行组合
例1:Group by rollup((A,B))
产生的分组种数:2 种;
第一种:group by A,B
第二种:group by NULL
返回结果集:为以上两种分组统计结果集的并集且未去掉重复数据。

例2:Group by rollup(A,(B,C))
产生的分组种数:3 种;
第一种:group by A,B,C
第二种:group by A
第三种:group by NULL
返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。

转载于:https://www.cnblogs.com/snake-hand/archive/2011/05/15/2452301.html

group by rollup相关推荐

  1. group by rollup | cube 学习

    1.如果是ROLLUP(A, B, C)的话,首先会对(A.B.C)进行GROUP BY,然后对(A.B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作. ...

  2. oracle按层级分组,oracle按照指定列分组合计group by rollup()

    group by rollup() 按分组合计 select grouping(status),status,owner,object_type,count(*) from dba_objects w ...

  3. Oracle 聚合实现小计、合计 (GROUP BY ROLLUP)

    1.先创建一个测试表 -- Create table 水果月销售记录表 create table C_FRUITS_SALES_RECORD_T (quarter VARCHAR2(20),--季度m ...

  4. group by rollup 和grouping的使用实例

    GROUPING函数可以接受一列,返回0或者1.如果列值为空,那么GROUPING()返回1:如果列值非空,那么返回0.GROUPING只能在使用ROLLUP或CUBE的查询中使用.当需要在返回空值的 ...

  5. ORACLE中每个分组后加个合计,最后总合计的GROUP BY rollup,和中文排序

    参考代码如下 SELECT LOCAL_NAME ,DEPT_DISTINGUISH_NAME ,SUM(TOTAL_PAY_SUM_R_LDC) TOTAL_PAY_SUM_R_LDC ,SUM(B ...

  6. postgre——case、union、小计总计(GROUP BY ROLLUP)写法

    //将几张不同表结构的数据全部合并在一起,使用了case.union,同时实现小计总计 //小计总计使用的 GROUP BY ROLLUP函数,GROUP BY ROLLUP使用双括号将字段括起来,是 ...

  7. SQL 2012 Group By Rollup, Grouping

  8. group by rollup 变量名为空值_【Python学习笔记】07、数据类型和变量

    在Python中,能够直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,包括负整数,例如:1,100,-8080,0,等等. 计算机由于使用二进制,所以,有时候用十六进制表示整 ...

  9. group by 字句的扩展+rollup字句+cube字句+grouping()函数

    1rollup字句 rollup字句扩展group by字句,为每一个分组返回一条小计记录,并为全部分组返回总计 列如:rollup字句获取每个部门的工资总计 select d.dname,sum(e ...

最新文章

  1. Shell基础命令之echo
  2. shop++商品搜索出现乱码的解决方法
  3. 以及其任何超类对此上下文都是未知的_浏览器原理系列 - JS执行上下文详解(一):作用域
  4. 【组合数学】生成函数 ( 使用生成函数求解多重集 r 组合数 )
  5. java导出word表格_使用PowerDesigner16.5 逆向数据库 导出word文档
  6. c语言编程获取当前系统时间包含年,月,日,时,分,秒.,C语言获取系统时间的几种方式...
  7. 【编程语言】JAVA | Windows10下JAVA的环境配置(绝对路径)
  8. java 广播地址,根据ip地址跟子网掩码获取广播地址的java实现
  9. c语言用数组写密码程序,想程序高手求助--用C语言来编辑一个输入密码的程序...
  10. python request库_【Python爬虫】Request库入门
  11. Linux Swap机制概述
  12. java集合学习笔记--二维集合HashMap
  13. Redhat 安装Informix 12.10
  14. 北斗心脏——高精度时间频率系统
  15. 成功解决 遇到3dmax模型文件出错,找回并修复出错文件
  16. 梵语和藏语_《百字明》梵文和藏文发音区分
  17. 帆软按钮控件变查询_JS使用填报页面的控件查询
  18. 上海跳槽后 如何进行公积金转移?
  19. 微信小程序--数据库数据批量导出为excel文件,预览下载
  20. Android实战技巧之三十九:短信收发

热门文章

  1. c语言学习加强营(一):switch分支
  2. win7系统如何访问xp系统的服务器,WIN7系统怎么让XP系统访问呢
  3. c++中求解非线性方程组_齐次线性方程组的基础解系的简便算法
  4. 电话光端机技术参数配置介绍
  5. [渝粤教育] 郑州商学院 商学概论 参考 资料
  6. [渝粤教育] 广东-国家-开放大学 大学英语2
  7. 【渝粤教育】广东开放大学 地基与基础 形成性考核 (27)
  8. 【渝粤题库】广东开放大学 文化产业经济学 形成性考核
  9. logistic回归 如何_R_语言 logistic回归分析
  10. 微信小程序错误 Cloud API isn‘t enabled, please call wx.cloud.init first 解决