`

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

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

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

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

第二种:group by C,A

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

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

2Group by rollup(A ,(B,C))
产生的分组种数:种;
第一种: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)

产生的分组种数:种;
第一种: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子句 效果就是只返回小记记录,即只返回按单个列分组后的统计数据,不返回多个列组合分组的统计数据。
1Group by grouping sets(A )
产生的分组种数:种;
第一种:group by A
返回结果集:即为以上一种分组的统计结果集。

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

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

分享到:
评论

相关推荐

    SELECT语句高级用法

    SELECT语句高级用法1,使用group by 子句group by 子句将表分为几组,此子句通常与为每个这样的组生产总结值的聚集函数组合。使用不带聚集的group by 子句与在select 子句中使用的distinct(或unique)关键字很相 ...

    T-SQL高级查询

    --高级查询在数据库中用得是最频繁的,也是应用最广泛的。 Ø 基本常用查询 --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 select distinct sex from ...

    oracle分组排序统计高级用法

    oracle如何实现分组排序和统计、聚集,如何分组求top N,什么是over分析函数,row_number(),rank(),dense_rank()区别又是什么, 如何找到一条记录的前后值,这份文档写得太好了。

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    7.1 基本的GROUP BY用法 171 7.2 HAVING子句 174 7.3 GROUP BY的“新”功能 175 7.4 GROUP BY的CUBE扩展 175 7.5 CUBE的实际应用 179 7.6 通过GROUPING()函数排除空值 185 7.7 用GROUPING()来扩展报告 186 ...

    SQL的基本教程.txt

    了解GROUP BY和HAVING子句的用法,用于对查询结果进行分组和过滤。 三、数据操作 学习如何使用INSERT INTO语句向数据库表中插入新数据。 掌握UPDATE语句的用法,以便修改数据库中的现有数据。 了解DELETE语句...

    Python数据分析实践:透视表和重塑dataframenew.pdf

    数据透视表用来做数据透视,可以通过一个或多个键分组聚合DataFrame中的数据,通过aggfunc参数决定聚合类型,是groupby的高级功能。 透视表就是将指定原有DataFrame的列分别作为行索引和列索引,然后对指定的列应用...

    剑破冰山++Oracle开发艺术[1].part01

    本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...

    剑破冰山++Oracle开发艺术[1].part07

    本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...

    剑破冰山++Oracle开发艺术[1].part04

    本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...

    剑破冰山++Oracle开发艺术[1].part02

    本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...

    剑破冰山++Oracle开发艺术[1].part08

    本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...

    剑破冰山++Oracle开发艺术[1].part10

    本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...

    剑破冰山++Oracle开发艺术[1].part03

    本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...

    剑破冰山++Oracle开发艺术[1].part09

    本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...

    剑破冰山++Oracle开发艺术[1].part05

    本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...

    剑破冰山++Oracle开发艺术[1].part06

    本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...

    大数据学习笔记

    第一部分 Spark学习 6 第1章 Spark介绍 7 1.1 Spark简介与发展 7 1.2 Spark特点 7 1.3 Spark与Hadoop集成 7 ...28.3.2 JDBC GROUP BY查询语句实例 105 28.4 查询语句(JOIN) 106 28.4.1 JOIN查询语句实例 106

    Java数据库技术详解 DOC简版

    3.4 GROUP BY和HAVING子句 3.5 INSERT语句 3.6 UPDATE语句 3.7 DELETE语句 3.8 本章小结 第4章 PL/SQL 4.1 PL/SQL简介 4.2 PL/SQL基础 4.3 本章小结 第二篇 JDBC篇 第5章 JDBC技术基础 5.1 ...

    JPA深度刘宝宝剖析版第一讲

    可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。 支持面向对象...

Global site tag (gtag.js) - Google Analytics