加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

超详细的5个Oracle数据库分组函数总结

发布时间:2019-11-05 18:08:16 所属栏目:编程 来源:波波说运维
导读:概述 本日首要分享下Oracle数据库分组函数group by 、 rollup、cude、grouping 、grouping sets的常用用法,以下以Oracle自带schema做演示。 1、group by的行使 --按照DEPTNO和JOB举办分组。求沟通DEPTNO,沟通JOB的员工人为总和。 SELECTE.DEPTNO,E.JOB,SU
副问题[/!--empirenews.page--]

概述

本日首要分享下Oracle数据库分组函数group by 、 rollup、cude、grouping 、grouping sets的常用用法,以下以Oracle自带schema做演示。

1、group by的行使

--按照DEPTNO和JOB举办分组。求沟通DEPTNO,沟通JOB的员工人为总和。

  1. SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY E.DEPTNO,E.JOB ORDER BY E.DEPTNO; 
超具体的5个Oracle数据库分组函数总结 2、group by 共同rollup的行使

rollup()--可以行使一个可能多个参数。意思是从右向左举办数据的汇总统计,并天生一行,rollup是个统计函数。

以下是按照分组环境举办统计,最终举办所有汇总。

(1)简朴的行使rollup--天生一行新数据。(要天生新的一行数据,还可以行使UNION ALL)

  1. SELECT D.DUMMY FROM DUAL D GROUP BY ROLLUP(D.DUMMY); 

超具体的5个Oracle数据库分组函数总结

(2)先按照E.DEPTNO,E.JOB举办分组,然后从右向左

  1. SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB) ORDER BY E.DEPTNO; 

超具体的5个Oracle数据库分组函数总结

针对以上的行使ROLLUP的功效的领略:

a:起首按照GROUP BY E.DEPTNO,E.JOB查询出9条数据(除4,8,12,13外),在按照rollup的界说,从右向左,对ROLLUP中的参数举办小计

起首按照JOB(对全部的JOB举办汇总),汇总出4,8,12行,在按照E.DEPTNO(对全部的DEPTNO举办汇总),汇总出第十三行数据。

(3) 非凡环境

  1. SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.JOB,E.DEPTNO) ORDER BY E.DEPTNO; 

超具体的5个Oracle数据库分组函数总结

领略:起首按照GROUP BY E.DEPTNO,E.JOB查询出前九条数据,其次对E.DEPTNO举办汇总,可是必需思量JOB,也就是沟通的JOB,的全部的人为总和,以是呈现下面五条数据。

3、group by 共同cube的行使

  1. SELECT E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY CUBE(E.DEPTNO,E.JOB) ORDER BY E.DEPTNO; 

超具体的5个Oracle数据库分组函数总结

领略:CUBE会对前提中的每一个前提举办单独的汇总:即对单独的罗列办汇总

GROUP BY CUBE(E.DEPTNO,E.JOB)起首按照:GROUP BY E.DEPTNO,E.JOB查询数据,其次对E.JOB举办汇总(不思量DEPTNO,单独汇总,而ROLLUP是在统一个DEPTNO下面)再对E.DEPTNO举办汇总,最后所有汇总。

  1. cube(a,b) 统计列包括:(a,b)、(a)、(b)、() 
  2. cube(a,b,c) 统计列包括:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、() 
4、GROUPING 的行使

GROUPING函数可以接管一列,返回0可能1。假如列值为空,那么GROUPING()返回1;假如列值非空,那么返回0。GROUPING只能在行使ROLLUP或CUBE的查询中行使。当必要在返回空值的处所表现某个值时,GROUPING()就很是有效。

  1. SELECT GROUPING(E.DEPTNO), E.DEPTNO,E.JOB,SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB) ORDER BY E.DEPTNO; 

超具体的5个Oracle数据库分组函数总结

可以行使decode可能case函数举办转换这种不友爱的表现:

  1. SELECT  
  2. CASE WHEN grouping(E.DEPTNO) = 1 
  3. THEN '总计' 
  4. ELSE E.DEPTNO || '' 
  5. END AS 部分, 
  6. CASE WHEN grouping(E.JOB) = 1 AND grouping(E.DEPTNO) = 0 
  7. THEN '小计' 
  8. ELSE E.JOB 
  9. END AS 事变种类, 
  10. SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB) 
  11. ORDER BY E.DEPTNO; 
超具体的5个Oracle数据库分组函数总结
  1. SELECT DECODE(GROUPING(E.DEPTNO), 1, '总计', E.DEPTNO) AS 部分, 
  2. CASE 
  3. WHEN GROUPING(E.JOB) = 1 AND GROUPING(E.DEPTNO) = 0 THEN 
  4. '小计' 
  5. ELSE 
  6. E.JOB 
  7. END AS 事变种类, 
  8. SUM(E.SAL) 
  9. FROM EMP E 
  10. GROUP BY ROLLUP(E.DEPTNO, E.JOB) 
  11. ORDER BY E.DEPTNO; 

超具体的5个Oracle数据库分组函数总结

5、grouping sets提供了指定汇总荟萃前提的成果

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读