• 高级聚合函数rollup(),cube(),grouping sets()


       rollup(),cube(),grouping sets()
      上面这几个函数,是对group by分组功能做的功能扩展。
    a.rollup()
      功能:在原结果基础上追加一行总合计记录
      rollup(字段1,字段2)会追加按字段1进行的合计记录,
      最后再追加一个总合计记录
     
      select deptno,count(*)
      from emp
      group by rollup(deptno);
     
      select deptno,job,count(*)
      from emp
      group by rollup(deptno,job)
      order by deptno;
      ----等价于下面写法-----
      select deptno,job,count(*)
      from emp
      group by deptno,job
      union
      select deptno,null,count(*)
      from emp
      group by deptno
      union
      select null,null,count(*)
      from emp
      order by deptno;
     
      结论:group by rollup(字段1,字段2,字段3)
        --查询按字段1,字段2,字段3分组统计结果
        --追加按字段1和字段2的合计
        --追加按字段1的合计
        --追加总合计记录
    b.cube()
     
      select deptno,count(*)
      from emp
      group by cube(deptno)
      order by deptno;
     
      cube(字段1):作用于rollup(字段1)相同。
       追加一行总合计记录。
     
      select deptno,job,count(*)
      from emp
      group by cube(deptno,job)
      order by deptno;
      --查询group by deptno,job分组统计结果
      --查询group by deptno分组统计结果
      --查询group by job分组统计结果
      --查询没有group by统计结果
     
     结论:group by cube(字段1,字段2,字段3)
      --查询group by 字段1,字段2,字段3统计结果
      --查询group by 字段1,字段2统计结果
      --查询group by 字段1统计结果
      --查询group by 字段2统计结果
      --查询group by 字段3统计结果
      --查询group by 字段2,字段3统计结果
      --查询group by 字段1,字段3统计结果
      --查询没有group by统计结果
     
    c.grouping sets()
     
      select deptno,count(*)
      from emp
      group by grouping sets(deptno)
      order by deptno;
      --上面和没加grouping sets()效果一样
     
      select deptno,job,count(*)
      from emp
      group by grouping sets(deptno,job)
      order by deptno;
     --只返回cube规则追加的分组统计结果
     --不包含没有group by和group by deptno,job的统计
      
  • 相关阅读:
    hasCode in Java
    如何区分同一Class的不同实例对象
    如何构建XML文件
    Spring <context:property-placeholder/>的作用
    关于List的几个方法
    Java 中那些不常用的关键字
    设计模式
    Java源代码阅读-Object.toString()
    修复启动项
    centos关闭防火前
  • 原文地址:https://www.cnblogs.com/yunman/p/5497808.html
Copyright © 2020-2023  润新知