zoukankan      html  css  js  c++  java
  • oracle中分组中的ROLLUP和CUBE选项

         在进行多列分组统计时,如果直接使用GROUP BY子句指定分组列,则只能生成基于所有分组列的统计结果。如果在GROUP BY子句中使用ROLLUP语句或CUBE语句,除了生成基于所有指定列的分组统计外,还可以生成基于指定列不同子集的统计结果。
    使用ROLLUP选项,除了生成基于所有指定列的分组统计外,还对指定的分组列从左开始的每个子集进行统计。例如,GROUP BY ROLLUP(A,B,C)形成的统计包括以下内容。
    ❑GROUP BY():不基于任何列的整个查询结果的统计。
    ❑GROUP BY A:基于A列的分组统计。

    ❑GROUP BY A,B:基于A、B两列的分组统计。
    ❑GROUP BY A,B,C:基于A、B、C三列的分组统计。
    使用CUBE选项,除了生成基于所有指定列的分组统计外,还对指定分组列的所有子集进行统计。例如,GROUP BY CUBE(A,B,C)形成的统计包括以下内容。
    ❑GROUP BY():不基于任何列的整个查询结果的统计。
    ❑GROUP BY A:基于A列的分组统计。
    ❑GROUP BY B:基于B列的分组统计。
    ❑GROUP BY C:基于C列的分组统计。
    ❑GROUP BY A,B:基于A、B两列的分组统计。
    ❑GROUP BY A,C:基于A、C两列的分组统计。
    ❑GROUP BY B,C:基于B、C两列的分组统计。

    ❑GROUP BY A,B,C:基于A、B、C三列的分组统计。
    例29:查询10、20、30的各个部门中各个职位的平均工资、每个部门的平均工资和所有员工的平均工资。查询结果的形式如表30-3所示。

    例30:查询10、20、30的各个部门中各个职位的平均工资、每个部门的平均工资、每个职位的平均工资和所有员工的平均工资。查询结果的形式如表30-4所示。

    为了了解每个统计结果是基于哪些列统计而来的,可以使用GROUPING函数,函数返回值为1时,表示该列没有参与统计;函数返回值为0时,表示该列参与了统计。

    例31:查询10、20、30的各个部门中各个职位的平均工资、每个部门的平均工资、每个职位的平均工资和所有员工的平均工资,显示每个统计结果是基于哪些列进行的。

    7.合并分组查询

    在Oracle 11g中,可以将几个单独的分组查询合并成一个分组查询。合并分组查询需要在GROUP BY子句中使用GROUPING SETS选项。
    例32:查询各个部门的平均工资和各个职位的平均工资。

    GROUPING SETS语句的作用就是使用一个语句得到多个分组统计的结果集。要注意嵌套列与非嵌套列的区别。嵌套列与单个GROUP BY语句作用相同;非嵌套列相当于将多个单独的GROUP BY语句查询结果,采用UNION ALL方式的合并起来。

    ❑GROUP BY GROUPING SETS((A,B,C)):等价于GROUP BY A,B,C。
    ❑GROUP BY GROUPING SETS(A,B,C):等价于GROUP BY A UNION ALL GROUPBY B UNION ALL GROUP BY C。
    ❑GROUP BY GROUPING SETS(A,(B,C)):等价于GROUP BY A UNION ALL GROUPBY B,C。
    30.2.4 累计统计查询
    在执行统计查询时,可以将聚集函数与OVER函数相结合,进行总体累计统计查询或分组累计统计查询。
    1.总体累计统计
    总体累计统计的每一个统计结果都是针对之前的所有记录进行的,在OVER函数中使用ORDER BY语句指定统计的顺序,如果不指定ORDER BY语句,则不进行累计统计。

    例33:对员工的工资、人数进行总体累计统计。

    由统计结果可以看出,累计统计的第一个统计结果是针对第一条记录进行的;第二个统计结果是针对前两条记录进行的;第三个统计结果是针对前三条记录进行的,以此类推。

    2.分组累计统计
    如果在进行累计统计时,需要按组进行,则需要使用PARTITION子句指定累计统计的分组列。
    例34:对各个部门中的员工的工资、人数进行分组累计统计。

  • 相关阅读:
    如何在vim中同时编辑多个文件
    Windows操作系统架构
    驱动中PAGED_CODE的作用
    Process Hacker源码中的用户态hook的做法
    IO Processing
    Device Drivers
    Windows IO System
    how to catch error in make error message
    分析/proc/[pid]/maps中的各个内存区域的大小
    boost::shared_ptr
  • 原文地址:https://www.cnblogs.com/wangyonglong/p/5140728.html
Copyright © 2011-2022 走看看