Oracle分组函数之ROLLUP的基本用法

所属分类: 数据库 / oracle 阅读数: 1220
收藏 0 赞 0 分享

rollup函数

本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种

环境准备

create table dept as select * from scott.dept;
create table emp as select * from scott.emp;

业务场景:求各部门的工资总和及其所有部门的工资总和

这里可以用union来做,先按部门统计工资之和,然后在统计全部部门的工资之和

select a.dname, sum(b.sal)
 from scott.dept a, scott.emp b
 where a.deptno = b.deptno
 group by a.dname
union all
select null, sum(b.sal)
 from scott.dept a, scott.emp b
 where a.deptno = b.deptno;

上面是用union来做,然后用rollup来做,语法更简单,而且性能更好

select a.dname, sum(b.sal)
 from scott.dept a, scott.emp b
 where a.deptno = b.deptno
 group by rollup(a.dname);

业务场景:基于上面的统计,再加需求,现在要看看每个部门岗位对应的工资之和

select a.dname, b.job, sum(b.sal)
 from scott.dept a, scott.emp b
 where a.deptno = b.deptno
 group by a.dname, b.job
union all//各部门的工资之和
select a.dname, null, sum(b.sal)
 from scott.dept a, scott.emp b
 where a.deptno = b.deptno
 group by a.dname
union all//所有部门工资之和
select null, null, sum(b.sal)
 from scott.dept a, scott.emp b
 where a.deptno = b.deptno;

用rollup实现,语法更简单

select a.dname, b.job, sum(b.sal)
 from scott.dept a, scott.emp b
 where a.deptno = b.deptno
 group by rollup(a.dname, b.job);

假如再加个时间统计的,可以用下面sql:

select to_char(b.hiredate, 'yyyy') hiredate, a.dname, b.job, sum(b.sal)
 from scott.dept a, scott.emp b
 where a.deptno = b.deptno
 group by rollup(to_char(b.hiredate, 'yyyy'), a.dname, b.job);

cube函数

select a.dname, b.job, sum(b.sal)
 from scott.dept a, scott.emp b
 where a.deptno = b.deptno
 group by cube(a.dname, b.job);

cube

函数是维度更细的统计,语法和rollup类似

假设有n个维度,那么rollup会有n个聚合,cube会有2n个聚合

rollup统计列

rollup(a,b) 统计列包含:(a,b)、(a)、()

rollup(a,b,c) 统计列包含:(a,b,c)、(a,b)、(a)、()

....

cube统计列

cube(a,b) 统计列包含:(a,b)、(a)、(b)、()

cube(a,b,c) 统计列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()

....

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

更多精彩内容其他人还在看

VS2015连接Oracle数据库的详细步骤

这篇文章主要介绍了VS2015连接Oracle数据库的详细步骤,需要的朋友可以参考下
收藏 0 赞 0 分享

常用的Oracle doc命令(收藏)

这篇文章主要介绍了常用的Oracle doc命令(收藏)的相关资料,非常不错,具有参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

ORACLE SQL语句优化技术要点解析

这篇文章主要介绍了ORACLE SQL语句优化技术的相关内容,小编觉得挺不错的,在这里分享给大家,需要的朋友可以参考下。
收藏 0 赞 0 分享

ORACLE多条件统计查询的简单方法

这篇文章主要介绍了ORACLE多条件统计查询的简单方法,具有一定参考价值。这里给大家分享下,希望对大家有所帮助。
收藏 0 赞 0 分享

ORACLE批量导入图片到BLOB字段代码示例

这篇文章主要介绍了ORACLE批量导入图片到BLOB字段代码示例,此代码示例是文章作者的项目源码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

PLSQL Developer登录的默认密码介绍

这篇文章主要介绍了PLSQL Developer登录的默认密码介绍,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Oracle数据行拆分多行方法示例

oracle数据库使用过程中,怎样将一行或者多行数据分割成需要的多行数据,本文我们就来看看具体方法,需要的朋友可以参考。
收藏 0 赞 0 分享

Oracle表空间不足的两种解决办法

这篇文章主要介绍了Oracle表空间不足的两种解决办法,需要的朋友可以参考下
收藏 0 赞 0 分享

巧妙解决Oracle NClob读写问题(经验分享)

下面小编就为大家带来一篇巧妙解决Oracle NClob读写问题(经验分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

oracle执行update语句时卡住问题分析及解决办法

这篇文章主要介绍了oracle执行update语句时卡住问题分析及解决办法,涉及记录锁等相关知识,具有一定参考价值,需要的朋友可以了解。
收藏 0 赞 0 分享
查看更多