`

GROUP分组函数之ROLLUP

 
阅读更多
   /******************
  *ROLLUP函数的使用
  ******************/
 案例1
 需求:
 × 统计每个部门每个职位的薪水和
 × 统计每个部门所有职位的薪水小计
 × 统计所有部门所有职位的薪水合计
 × 需要显示部门名、职位名和累加后的薪水

--需求1
 SELECT D.DNAME, E.JOB, SUM(E.SAL) SUM_SAL
   FROM DEPT D, EMP E
  WHERE D.DEPTNO = E.DEPTNO
  GROUP BY D.DNAME, E.JOB
 UNION ALL
 --需求2
 SELECT D.DNAME, NULL, SUM(E.SAL) SUM_SAL
   FROM DEPT D, EMP E
  WHERE D.DEPTNO = E.DEPTNO
  GROUP BY D.DNAME
 UNION ALL
 --需求3
 SELECT NULL, NULL, SUM(E.SAL) SUM_SAL
   FROM DEPT D, EMP E
  WHERE D.DEPTNO = E.DEPTNO;
  

 


    


   

 

 --使用ROLLUP分组
 SELECT D.DNAME, E.JOB, SUM(E.SAL) AS SUM_SAL
   FROM DEPT D, EMP E
  WHERE D.DEPTNO = E.DEPTNO
  GROUP BY ROLLUP(D.DNAME, E.JOB);

 

    

 

 


    

   

 

ROLLUP(D.DNAME, E.JOB)的分组过程是:
 1)标准分组:GROUP BY (D.DNAME, E.JOB),对每个部门每个职位进行分组
 2)从右到左递减:GROUP BY (D.DNAME, NULL),其实这个NULL没有必要使用,这里只是为了
    方便分析。这个过程是对上一个级别分组的小计,也就是对每个DNAME值,计算横跨所有
    JOB的小计。
 3)最后合计:相当于 GROUP BY (NULL,NULL).
 
 上面的ROLLUP只用了两个列,如果有N个列,那么结果就是n+1中group by的组合,
 从右到左递减的过程中,下一个分组就是对上一个分组的小计。
 另外,在ROLLUP操作是,如果使用HINT:expand_gset_to_union,则优化器会将ROLLUP转为
 对应的UNION ALL操作。
 

 

案例2
 需求
 × 计算每个入职时间(年)、部门、职位的标准分组的薪水和;
 × 计算每个入职时间(年)、部门的所有职位的薪水小计;
 × 计算每个入职时间(年)的所有部门所有职位的薪水小计。
 × 最后合计薪水,显示入职时间(年)、部门名、职位名
 
 SELECT TO_CHAR(E.HIREDATE, ' yyyy') HIRE_YEAR,
        D.DNAME,
        E.JOB,
        SUM(SAL) SUM_SAL
   FROM DEPT D, EMP E
  WHERE D.DEPTNO = E.DEPTNO
  GROUP BY ROLLUP(TO_CHAR(E.HIREDATE, ' yyyy'), D.DNAME, E.JOB)
 

 

  

 

 

  • 大小: 8.4 KB
  • 大小: 25.7 KB
  • 大小: 13 KB
  • 大小: 13.5 KB
  • 大小: 15.9 KB
分享到:
评论

相关推荐

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

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

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

    相比之下,`ROLLUP` 会按照层次递减的方式生成分组,只包括:`GROUP BY A, B`、`GROUP BY A` 和 `GROUP BY NULL`。 通过这些例子可以看出,`ROLLUP` 和 `CUBE` 都能够提供更丰富的数据分组选项,但在具体应用场景中...

    group by后使用rollup子句总结

    `ROLLUP` 子句可以在 `GROUP BY` 语句中使用,用于对分组结果进行汇总统计。它可以产生多种分组,然后对各个分组进行统计操作。`ROLLUP` 子句返回的结果集可以理解为各个分组所产生的结果集的并集且没有去掉重复数据...

    Oracle分组函数之ROLLUP的基本用法

    Oracle数据库中的分组函数是数据分析和报表生成的重要工具,它们允许我们对数据进行汇总和聚合。其中,`ROLLUP`函数是一种特殊的分组操作,它提供了多级分组的能力,可以生成汇总数据的不同层次,从最细粒度的分组到...

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

    GROUP BY 子句是 SQL 语言中用于分组数据的关键字,它可以根据一个或多个列对数据进行分组,并对每个分组应用聚合函数,以便计算和输出所需的结果。GROUP BY 子句有多种形式,本文将通过实例来说明 GROUP BY 子句的...

    oracle 分组函数

    在SQL查询中,我们通常使用`GROUP BY`语句来定义分组,然后使用分组函数对每个分组进行计算。例如,如果我们有一个订单表,可以按客户分组,然后计算每个客户的总销售额。 二、常见Oracle分组函数 1. COUNT():这...

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

    ### 使用ROLLUP函数生成报表的小计、合计 在数据库查询操作中,经常需要对数据进行分组统计,并在此基础上进一步生成包含小计和总计的报表。这种需求在人力资源管理系统(如文中提到的eHR系统)以及其他各类业务...

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

    `GROUP BY`子句是SQL查询中的一个非常重要的部分,它用于将数据表中的行按照一个或多个列进行分组,使得可以对每个分组执行聚合函数(如SUM、COUNT、AVG等)。在数据库管理中,当我们需要对某些特定字段的数据进行...

    Sequelize中用group by进行分组聚合查询

    在SQL中,分组查询是通过`GROUP BY`子句来实现的,它可以将数据按照一个或多个列的值进行分组,通常结合聚合函数一起使用,以便对每个分组执行计算。 1. SQL中的分组查询 在SQL中,使用`GROUP BY`语句进行分组操作...

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

    当我们需要更复杂的分组和汇总信息时,可以使用扩展的聚合功能,如ROLLUP、CUBE以及GROUPING()和GROUPING_ID()函数。这些功能允许我们生成多层次的总计和小计,为数据分析提供了极大的灵活性。 1. ROLLUP子句: ...

    Oracle ROLLUP和CUBE 用法

    ROLLUP操作是GROUP BY的一个扩展,它允许你生成一个包含不同层次的分组结果,从最细粒度的分组到最粗粒度的分组,类似于数据透视表的逐级展开。例如,如果你有一个按地区、城市和部门分组的数据集,使用ROLLUP可以...

    cube与rollup学习总结

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

    ROLLUP的数据统计效果

    在标准的`GROUP BY` 语句中,我们指定一列或多列进行分组,然后对每个组进行聚合函数(如`SUM`,`COUNT`,`AVG`等)的操作。但当使用`ROLLUP` 时,它会生成所有可能的分组组合,包括原始的`GROUP BY` 列及其子集。 ...

    Oracle的Rollup用法

    在 Oracle 中,ROLLUP 子句可以与 GROUP BY 子句配合使用,以便对数据进行分组和聚合。ROLLUP 子句可以指定一个或多个字段,用于对数据进行分组和聚合。 例如,以下是对 grade 字段进行 rollup 的示例: SQL> ...

    rollup 在中石油开发数据库系统的使用实例

    Rollup 是 SQL 中的一种分组函数,它可以生成一个结果集,该结果集不仅包含所有可能的分组组合的结果,还包含所有可能的子集组合的结果。简单来说,Rollup 可以帮助我们生成不同级别的汇总数据,从而实现多维度的...

    group by用法.doc

    `GROUP BY` 语句是SQL中用于对数据进行分组的重要工具,通常与聚合函数如`COUNT`, `SUM`, `AVG`, `MAX`, `MIN`等一起使用。其基本概念是根据一个或多个列的值将数据分为不同的组,然后对每个组应用聚合函数以得出每...

    rollup及cube的使用

    `ROLLUP`是一个分组函数,它能够生成所有可能的子集汇总,通常与`GROUP BY`语句一起使用。当我们在查询中使用`ROLLUP`时,它会按照指定的列进行分组,并且还会返回每一级的汇总结果。下面通过具体的例子来详细了解`...

    Oracle中分组查询group by用法规则详解

    - `GROUP BY ROLLUP`用于创建分组的层次结构,提供汇总数据。 - `GROUP BY CUBE`创建所有可能的组合,包括空组。 - `GROUP BY GROUPING SETS`是`ROLLUP`和`CUBE`的组合,可自定义分组。 了解这些基本规则和用法...

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

    优化 Group By 查询速度的...通过本实例,我们可以总结出一些有价值的经验:在优化 Group By 查询时,需要将聚合函数用到的字段一起设置为联合索引;需要充分测试和分析查询结果;需要遵循一定的思路来优化查询;等等。

Global site tag (gtag.js) - Google Analytics