欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Oracle之Group by 扩展分组函数

程序员文章站 2022-05-10 09:24:49
...

Oracle之group by 扩展分组函数 测试学习过程如下:---rollup:以每个部门为参考对象,每个部门下员工薪水的明细和汇总select t.de

Oracle之group by 扩展分组函数

测试学习过程如下:-
--rollup:以每个部门为参考对象,每个部门下员工薪水的明细和汇总
select t.dept_id,t.dept_name,sum(t.salary)
from qcfang.test1 t
group by rollup(t.dept_id,t.dept_name)


--cube:信息量最大的交叉报表,汇总,明细均有
select t.dept_id,t.dept_name,sum(t.salary)
from qcfang.test1 t
group by cube(t.dept_id,t.dept_name)


--rollup 取消最后的总计,其实是过滤掉了dept_id 为null的记录
select t.dept_id,t.dept_name,sum(t.salary)
from qcfang.test1 t
group by t.dept_id, rollup(t.dept_name)
order by t.dept_id


--cube取消总计,其实是过滤掉了dept_id为null的记录
select t.dept_id,t.dept_name,sum(t.salary)
from qcfang.test1 t
group by t.dept_id,cube(t.dept_name)


--grouping settings:每个维度不同值的汇总,相当于多个union all
select t.dept_id,t.dept_name,sum(t.salary)
from qcfang.test1 t
group by grouping sets(t.dept_id,t.dept_name)


--利用grouping 函数,找出哪些是合计:flag=1为合计.
select t.dept_id,t.dept_name,sum(t.salary),grouping(t.dept_name)flag
from qcfang.test1 t
group by rollup(t.dept_id,t.dept_name)
order by t.dept_id


--利用grouping函数过滤分组
select t.dept_id,t.dept_name,sum(t.salary),grouping(t.dept_name)flag
from qcfang.test1 t
group by rollup(t.dept_id,t.dept_name)
having grouping(t.dept_name) =0


--利用grouping_id 进行排序
select t.dept_id,t.dept_name,sum(t.salary),grouping(t.dept_name)flag
from qcfang.test1 t
group by rollup(t.dept_id,t.dept_name)
order by grouping_id(t.dept_id,t.dept_name),t.dept_id

推荐阅读:

Oracle的Lpad函数

Oracle正则表达式函数详解

Oracle DB 组函数

Oracle DB 使用转换函数和条件表达式

Oracle中窗口函数over()的学习