首先引用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
返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。
分享到:
相关推荐
一、如何理解group by 后 带 rollup 子句所产生的效果 group by 后 带 rollup 子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据(至于统计出的数据是求和还是最大值还是平均值等这就取决...
group by后使用rollup子句总结,oracle开发人员值得一看
GROUP BY子句要和聚合函数配合使用才能完成分组查询,在SELECT查询的字段中,如果没有使用聚合函数就必须出现在ORDER BY子句中。分组查询后,查询结果为一个或多个列分组后的结果集。 GROUP BY语法 SELECT 列名, ...
使用ROLLUP函数生成报表的小计、合计 这个函数很不错 使用的范围其实蛮广的
实际项目中因表数据量大,发现查询速度很慢。记录此次排查和优化过程。希望对阅读到此文章的朋友有所帮助。
SQL语句中Group BY 和Rollup以及cube用法
GROUP BY子句(rollup,cube,grouping sets)实例说明
SQL Server中的用法为group by colomn with [rollup|cube],首先要弄明白rollup 和cube,就要知道group by的用法,group by 为对列进行分组,只展现分组统计的值,而 rollup 为分层次展现,cube 为展现列中所有层次...
Excel VBA实例教学,适用于office 2003 2007 2010等多个版本
sql学习 rollup之 group by 的完美增强.sql
20.oracle8中扩充了group by rollup和cube的操作。有时候省了你好多功夫的。 下面的语句可以进行总计 select region_code,count(*) from aicbs.acc_woff_notify group by rollup(region_code); <2> 对第1个字段...
用union all方式对上面代码改写如下:SQL> select group_id,job,sum(salary) from group_test 2 g
关于with cube ,with rollup 和 grouping 通过查看sql 2005的帮助文档找到了CUBE 和 ROLLUP 之间的具体区别: ...仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相关联的选择列表中才允许分组。 当看到以上
group by扩展包括 rollup、cube、grouping、grouping sets的用法和说明
详细介绍了cube、rollup、grouping sets的原理及用法
ROLLUP是GROUP BY子句的扩展,它是为每一个分组返回一条合计记录,并为全部分组返回总计。 2.CUBE子句也是对GROUP BY子句进行扩展,返回CUBE中所有列组合的小计信息,同时在最后显示总计信息。 3.GROUPING()函数...
day11: where条件之比较运算、逻辑运算 模糊查询(like) % 表示任意多个字符 ... group by + with rollup:分组+小计 限制记录limit:限制取出记录的数量,要写在SQL语句的最后 标准的SQL书写格式
使用带ROLLUP操作符的GROUP BY子句,可指定在结果???内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。 ; 【例】按图书类别、出版社分类统计Book表中各类图书的库存数。 SELECT 图书类别, 出版社, Sum(数量) AS ...
归纳一下:group by:ALL ,Cube,RollUP,Compute,Compute by 创建数据脚本 Create Table SalesInfo (Ctiy nvarchar(50), OrderDate datetime, OrderID int ) insert into SalesInfo select N’北京’,’2014-06-...
group by 属性名 [having 条件表达式][ with rollup] “属性名 ”指按照该字段值进行分组;“having 条件表达式 ”用来限制分组后的显示,满足条件的结果将被显示;with rollup 将会在所有记录的最后加上一条记录,...