Oracle-groupby后使用rollup子句总结.doc_第1页
Oracle-groupby后使用rollup子句总结.doc_第2页
Oracle-groupby后使用rollup子句总结.doc_第3页
Oracle-groupby后使用rollup子句总结.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

group by后使用rollup子句总结一、如何理解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 by NULL 的写法,在这里指是为了方便说明,而采用之。含义是:没有分组,也就是所有数据做一个统计。例如聚合函数是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返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。注:对这种情况,可以理解为几个列被括号括在一起时,就只能被看成一个整体,分组时不需要再细化。因此也可推断rollup括号内也顶多加到一重括号,加多重了应该没有任何意义(这个推断我没有做验证的哦)。二、与rollup组合使用的其它几个辅助函数1、grouping()函数必须接受一列且只能接受一列做为其参数。参数列值为空返回1,参数列值非空返回0。2、grouping_id()函数必须接受一列或多列做为其参数。返回值为按参数排列顺序,依次对各个参数使用grouping()函数,并将结果值依次串成一串二进制数然后再转化为十进制所得到的值。例如:grouping(A) = 0 ; grouping(B) = 1;则:grouping_id(A,B) = (01)2 = 1;grouping_id(B,A) = (10)2 =2;3、group_id()函数调用时不需要且不能传入任何参数。返回值为某个特定的分组出现的重复次数(第一大点中的第3种情况中往往会产生重复的分组)。重复次数从0开始,例如某个分组第一次出现则返回值为0,第二次出现时返回值为1,第n次出现返回值为n-1。注:使用以上三个函数往往是为了过滤掉一部分统计数据,而达到美化统计结果的作用。三、group by后带rollup子句与group by后带cube子句区别group by后带rollup子句与group by后带cube子句的唯一区别就是:带cube子句的group by会产生更多的分组统计数据。cube后的列有多少种组合(注意组合是与顺序无关的)就会有多少种分组。例:Group by cube(A ,B,C)产生的分组种数:8种;第一种:group by A,B,C第二种:group by A,B第三种:group by A,C第四种:group by B,C第五种:group by C第六种:group by B第七种:group by A第八种:group by NULL返回结果集:为以上八种分组统计结果集的并集且未去掉重复数据。四、group by后带grouping sets子句group by后带grouping sets子句效果就是只返回小记记录,即只返回按单个列分组后的统计数据,不返回多个列组合分组的统计数据。例1:Group by grouping sets(A )产生的分组种数:1种;第一种:group by A返回结果集:即为以上一种分组的统计结果集。例2:Group by grouping sets(A ,B)产生的分组种数:2种;第一种:group by A第二种:group by B返回结果集:为以上两种分组统计结果集的并集且未去掉重复数据。例3:Group by grouping sets (A ,B,C)产生的分组种数:3种;第一种:group by A第二种:group by B第三种:group by C返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。select t.city_name,decode(t.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论