温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Oracle数据库中有哪些分组函数

发布时间:2021-08-05 14:28:57 来源:亿速云 阅读:159 作者:Leah 栏目:数据库

这篇文章给大家介绍Oracle数据库中有哪些分组函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1、group by的使用

--根据DEPTNO和JOB进行分组。求相同DEPTNO,相同JOB的员工工资总和。

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

Oracle数据库中有哪些分组函数

2、group by 配合rollup的使用

rollup()--可以使用一个或者多个参数。意思是从右向左进行数据的汇总统计,并生成一行,rollup是个统计函数。

以下是根据分组情况进行统计,最终进行全部汇总。

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

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

Oracle数据库中有哪些分组函数

(2)先根据E.DEPTNO,E.JOB进行分组,然后从右向左

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

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) 特殊情况

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

Oracle数据库中有哪些分组函数

理解:首先根据GROUP BY E.DEPTNO,E.JOB查询出前九条数据,其次对E.DEPTNO进行汇总,但是必须考虑JOB,也就是相同的JOB,的所有的工资总和,所以出现下面五条数据。

3、group by 配合cube的使用

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

Oracle数据库中有哪些分组函数

理解:CUBE会对条件中的每一个条件进行单独的汇总:即对单独的列进行汇总

GROUP  BY CUBE(E.DEPTNO,E.JOB)首先根据:GROUP BY  E.DEPTNO,E.JOB查询数据,其次对E.JOB进行汇总(不考虑DEPTNO,单独汇总,而ROLLUP是在同一个DEPTNO下面)再对E.DEPTNO进行汇总,最后全部汇总。

cube(a,b) 统计列包含:(a,b)、(a)、(b)、() 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()就非常有用。

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;

Oracle数据库中有哪些分组函数

可以使用decode或者case函数进行转换这种不友好的显示:

SELECT  CASE WHEN grouping(E.DEPTNO) = 1 THEN '总计' ELSE E.DEPTNO || '' END AS 部门, CASE WHEN grouping(E.JOB) = 1 AND grouping(E.DEPTNO) = 0 THEN '小计' ELSE E.JOB END AS 工作种类, SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO,E.JOB) ORDER BY E.DEPTNO;

Oracle数据库中有哪些分组函数

SELECT DECODE(GROUPING(E.DEPTNO), 1, '总计', E.DEPTNO) AS 部门, CASE WHEN GROUPING(E.JOB) = 1 AND GROUPING(E.DEPTNO) = 0 THEN '小计' ELSE E.JOB END AS 工作种类, SUM(E.SAL) FROM EMP E GROUP BY ROLLUP(E.DEPTNO, E.JOB) ORDER BY E.DEPTNO;

Oracle数据库中有哪些分组函数

5、grouping sets提供了指定汇总集合条件的功能

根据E.DEPTNO,E.JOB分别汇总数据。

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

Oracle数据库中有哪些分组函数


关于Oracle数据库中有哪些分组函数就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI