`

group by cube和rollup学习笔记

 
阅读更多

 建表如下: 

 

create table TEST_GROUP(NAME VARCHAR2(20),CLASS VARCHAR2(10),KEMU VARCHAR2(4),CHENGJI VARCHAR2(3));
insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI)
values ('张三', '1班', '数学', '90');
insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI)
values ('张三', '1班', '语文', '68');
insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI)
values ('李四', '1班', '数学', '90');
insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI)
values ('李四', '1班', '语文', '88');
insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI)
values ('王五', '2班', '数学', '70');
insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI)
values ('王五', '2班', '语文', '88');
insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI)
values ('小六', '2班', '数学', '95');
insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI)
values ('小六', '2班', '语文', '98');

 

ROLLUP用法:

    GROUP BY ROLLUP(A, B, C), 首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。

select class, name, sum(chengji) from test_group
 group by rollup(class, name) order by class;

 

 

 

CUBE用法:

    GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C), 最后对全表进行GROUP BY操作。

select class, name, sum(chengji) from test_group
 group by cube(class, name) order by class;

 

 

grouping sets用法:

    grouping sets就是对参数中的每个参数做grouping,也就是有几个参数做几次grouping, 例如使用group by grouping sets(A,B,C),则对(A),(B),(C)进行group by,如果使用group by grouping sets((A,B),C),则对(A,B),(C)进行group by。甚至grouping by grouping set(A,A)都是语法允许的,也就是对(A)进行2次group by, grouping sets的参数允许重复

select class, name, sum(chengji) from test_group
 group by grouping sets(class,name);

 

 

grouping()函数排除空值用法:

    grouping():参数只有一个,而且必须为group by中出现的某一列,表示结果集的一行是否对该列做了grouping。对于对该列做了grouping的行而言,grouping()=0,反之为1;

select case
         when grouping(name) = '1' and grouping(class) = '0' then
          class || ' 合计'
         when grouping(name) = '0' and grouping(class) = '0' then
          name
         when grouping(name) = '1' and grouping(class) = '1' then
          '总计'
       end,
       sum(chengji)
  from test_group
 group by rollup(class, name)
 order by class;

 

 

having grouping()用法:

select decode(grouping(name), '1', '    总计:', name), sum(chengji)
  from test_group
 group by cube(class, name)
having grouping(class) = 1;

 

grouping_id()函数用法:

     grouping_id():参数可以是多个,但必须为group by中出现的列。Grouping_id()的返回值其实就是参数中的每列的grouping()值的二进制向量,例如如果grouping(A)=1,grouping(B)=0,则grouping_id(A,B)的返回值就是二进制的10,转成10进制就是2。

select grouping_id(class, name),
       grouping(class),
       grouping(name),
       name,
       class,
       sum(chengji)
  from test_group
 group by cube(class, name);

 

 

结果集看是有点乱,我们加上having条件看看:

select grouping_id(class, name),
       grouping(class),
       grouping(name),
       name,
       class,
       sum(chengji)
  from test_group
 group by cube(class, name)
having grouping_id(class, name) in(0,1,3);

 

 

 

group_id()函数用法:

    group_id():无参数。见上面的说明3),group by对某些列的集合会进行重复的grouping,而实际上绝大多数情况下对结果集中的这些重复行是不需要的,那就必须有办法剔出这些重复grouping的行。当结果集中有n条重复grouping而形成的行时,每行的group_id()分别是0,1,…,n,这样我们在条件中加入一个group_id()<1就可以剔出这些重复grouping的行了。

 

GROUP BY 的局限性

    如果不知道GROUP BY不能做什么,你对于它的学习就是不完整的。GROUP BY的局限性如下:

       1. LOB列,不能用做GROUP BY 表达式的一部分

       2. 子查询是不允许的

       3. 如果GROUP BY子句引用任何对象类型的列,则查询不能并行化

 

  • 大小: 29.5 KB
  • 大小: 38.1 KB
  • 大小: 25 KB
  • 大小: 35.4 KB
  • 大小: 28 KB
  • 大小: 72.2 KB
  • 大小: 56.3 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    SQL语句中Group BY 和Rollup以及cube用法

    ### SQL语句中Group BY 和Rollup以及Cube用法 #### Group BY 子句 `GROUP BY`子句是SQL查询中的一个非常重要的部分,它用于将数据表中的行按照一个或多个列进行分组,使得可以对每个分组执行聚合函数(如SUM、...

    GROUP BY子句(rollup,cube,grouping sets)实例说明

    GROUP BY 子句有多种形式,本文将通过实例来说明 GROUP BY 子句的三种样式:GROUP BY、GROUP BY ROLLUP、GROUP BY CUBE、GROUP BY GROUPING SETS。 1. GROUP BY 语句 GROUP BY 语句是最基本的分组语句,它可以根据...

    cube与rollup学习总结

    而在`GROUP BY`的基础上,`CUBE`和`ROLLUP`两个关键词则提供了一种更加灵活的数据分组方式,可以生成不同层次级别的汇总结果。 #### 一、Cube的理解 `CUBE`是SQL中的一个扩展关键字,它可以生成所有可能的分组组合...

    SQL语句中Group BY 和Rollup以及cube用法.txt

    SQL Server中的用法为group by colomn with [rollup|cube],首先要弄明白rollup 和cube,就要知道group by的用法,group by 为对列进行分组,只展现分组统计的值,而 rollup 为分层次展现,cube 为展现列中所有层次...

    group by 后 使用 rollup 子句 总结.doc

    - 对于 `GROUP BY CUBE(A, B)`,产生的分组包括:`GROUP BY A, B`、`GROUP BY A`、`GROUP BY B` 和 `GROUP BY NULL`。 相比之下,`ROLLUP` 会按照层次递减的方式生成分组,只包括:`GROUP BY A, B`、`GROUP BY A` ...

    group by后使用rollup子句总结

    「GROUP BY 与 ROLLUP 子句的使用」 `GROUP BY` 语句是 SQL 中一种常用的语句,用来对查询结果进行分组并进行聚合操作。但是,如果我们想要对分组结果进行汇总统计时,使用 `ROLLUP` 子句可以实现这一功能。 ...

    Sql学习第四天——SQL 关于with cube,with rollup和grouping解释及演示

    `CUBE`和`ROLLUP`是`WITH`子句中的两个特殊运算符,它们主要用于多维度数据分析和聚合操作,通常在`GROUP BY`语句中配合使用。 1. **CUBE运算符**: `CUBE`生成的结果集包含了所有可能的子集,即所选列中值的所有...

    group by分组函数之rollup与cube用法1

    而在GROUP BY的基础上,Oracle数据库提供了两种高级分组功能:ROLLUP和CUBE,它们允许我们更灵活地生成汇总数据。 1. ROLLUP(滚联回溯): ROLLUP是GROUP BY的一个扩展,它不仅返回每个单独的分组结果,还会生成...

    Oracle ROLLUP和CUBE 用法

    Oracle数据库中的ROLLUP和CUBE是两种用于生成数据汇总的SQL操作,它们在数据分析和报告制作中非常有用。本文将详细介绍这两个概念以及如何在实际应用中使用它们。 首先,我们来理解`ROLLUP`。ROLLUP操作是GROUP BY...

    Hive开窗函数测试-cube,rollup

    本篇将重点探讨Hive中的窗口函数以及如何利用它们进行cube和rollup操作。这些功能极大地增强了数据分析的能力,使得我们可以对数据进行更复杂的聚合。 窗口函数在SQL中是一种非常强大的工具,它允许我们在一个数据...

    ORACLE学习笔记系列(15)使用扩展的 GROUP BY 子句

    在"ORACLE学习笔记系列(15)使用扩展的 GROUP BY 子句"这篇博文中,作者深入探讨了GROUP BY子句的高级用法,特别是如何利用扩展功能来处理更复杂的查询需求。 在标准的GROUP BY语句中,我们通常会指定一列或多列,...

    SQLSERVER中union,cube,rollup,cumpute运算符使用说明

    在SQLSERVER中,有四种特殊的运算符用于处理和汇总数据:UNION、CUBE、ROLLUP和COMPUTE。这些运算符在数据查询和分析时非常有用,尤其在处理多个数据源合并、多维数据分析和自定义汇总计算时。 首先,我们来详细...

    oracle中聚合函数的扩展使用(ROLLUP CUBE、GROUPING()函数与ROLLUP、CUBE的结合使用等)

    它返回一个整数值,表示其参数在GROUP BY或ROLLUP/CUBE中的分组级别。值为0表示详细数据,非零值表示不同级别的汇总。例如: ```sql SELECT DIVISION, JOB_ID, SUM(SALARY), GROUPING(DIVISION), GROUPING(JOB_ID...

    rollup及cube的使用

    在这个例子中,`GROUP BY ROLLUP (index_type, status)`表示先按`index_type`分组,再按`status`分组,最后返回所有可能的子集汇总。查询结果会包括各个`index_type`的状态数量、各`index_type`的总计、所有`index_...

    使用ROLLUP函数生成报表的小计、合计

    `ROLLUP`是一个用于GROUP BY子句的扩展选项,它能够帮助我们生成包含不同层级汇总信息的结果集。通过使用`ROLLUP`,可以在结果集中自动生成各种级别上的汇总数据,而无需额外编写复杂的SQL语句。 #### 二、基本用法...

    rollup cube grouping sets的用法

    在数据库查询语言 SQL 中,`ROLLUP`, `CUBE`, 和 `GROUPING SETS` 是三个重要的概念,它们主要用于处理多维度数据的汇总和分组问题,使得数据分析更加灵活高效。接下来,我们将详细介绍这三个概念的原理、语法以及...

    sql学习 cube之比rollup粒度更细的展现.sql

    sql学习 cube之比rollup粒度更细的展现.sql

    处理group by 查询速度太慢的问题 数据量大.doc

    优化 Group By 查询速度的实践经验 在实际项目中,遇到了表数据量大导致查询速度很慢的问题。通过记录和优化过程,总结出一些有价值的经验,希望能够帮助读者解决类似的问题。 知识点1:Group By 查询的索引设置 ...

Global site tag (gtag.js) - Google Analytics