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

mac2022-06-30  22

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的统计   

转载于:https://www.cnblogs.com/yunman/p/5497808.html

最新回复(0)