学会Oracle分组函数rollup,让你在数据统计和报表方面得心应手!

栏目:房产 来源:中国节能设备网 时间:2019-10-25

概述

今天主要分享Oracle ROLLUP分组函数的用法,体验一下Oracle在统计查询领域中的函数魅力。ROLLUP分组函数可以理解为Group By分组函数封装后的精简用法。


01

初始化实验坏境

1)创建测试表group_test

create table group_test (group_id int, job varchar2(10), name varchar2(10), salary int);
学会Oracle分组函数rollup,让你在数据统计和报表方面得心应手!

2)初始化数据

insert into group_test values (10,'Coding', 'Bruce',1000);
insert into group_test values (10,'Programmer','Clair',1000);
insert into group_test values (10,'Architect', 'Gideon',1000);
insert into group_test values (10,'Director', 'Hill',1000);
insert into group_test values (20,'Coding', 'Jason',2000);
insert into group_test values (20,'Programmer','Joey',2000);
insert into group_test values (20,'Architect', 'Martin',2000);
insert into group_test values (20,'Director', 'Michael',2000);
insert into group_test values (30,'Coding', 'Rebecca',3000);
insert into group_test values (30,'Programmer','Rex',3000);
insert into group_test values (30,'Architect', 'Richard',3000);
insert into group_test values (30,'Director', 'Sabrina',3000);
insert into group_test values (40,'Coding', 'Samuel',4000);
insert into group_test values (40,'Programmer','Susy',4000);
insert into group_test values (40,'Architect', 'Tina',4000);
insert into group_test values (40,'Director', 'Wendy',4000);
commit;
学会Oracle分组函数rollup,让你在数据统计和报表方面得心应手!

3)初始化之后的数据:

set pages 100
select * from group_test;
学会Oracle分组函数rollup,让你在数据统计和报表方面得心应手!


02

group by

先看一下普通分组的效果:对group_id进行普通的group by操作---按照小组进行分组

select group_id,sum(salary) from group_test group by group_id;
学会Oracle分组函数rollup,让你在数据统计和报表方面得心应手!


03

ROOLUP

对group_id进行普通的roolup操作---按照小组进行分组,同时求总计

select group_id,sum(salary) from group_test group by rollup(group_id);
学会Oracle分组函数rollup,让你在数据统计和报表方面得心应手!

使用Group By语句翻译一下上面的SQL语句如下(union all一个统计所有数据的行):

select group_id,sum(salary) from group_test group by group_id
union all
select null, sum(salary) from group_test order by 1;
学会Oracle分组函数rollup,让你在数据统计和报表方面得心应手!


04

rollup两列

select group_id,job,sum(salary) from group_test group by rollup(group_id, job);
学会Oracle分组函数rollup,让你在数据统计和报表方面得心应手!

上面的SQL语句该如何使用Group By进行翻译呢?

答案如下:

select group_id,job,sum(salary) from group_test group by group_id, job union all select group_id,null,sum(salary) from group_test group by group_id union all
select null,null,sum(salary) from group_test order by 1,2;
学会Oracle分组函数rollup,让你在数据统计和报表方面得心应手!


05

GROUPING函数

select group_id,job,grouping(GROUP_ID),grouping(JOB),sum(salary) from group_test group by rollup(group_id, job);

学会Oracle分组函数rollup,让你在数据统计和报表方面得心应手!

说明:

如果显示“1”表示GROUPING函数对应的列(例如JOB字段)是由于ROLLUP函数所产生的空值对应的信息,即对此列进行汇总计算后的结果。

如果显示“0”表示此行对应的这列参未与ROLLUP函数分组汇总活动。

“Using a single column as its argument,GROUPING returns 1 when it encounters a NULL value created by a ROLLUP or CUBEoperation. That is, if the NULL indicates the row is a subtotal, GROUPING returns a 1. Any other type of value, including a stored NULL, returns a 0.”


06

总结

ROLLUP在数据统计和报表生成过程中带来极大的便利,而且效率比起来Group By + Union组合方法效率高得多。这也体现了Oracle在SQL统计分析上人性化、自动化、高效率的特点。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

学会Oracle分组函数rollup,让你在数据统计和报表方面得心应手!

相关文章
评论
新版评论功能开发中
头条推荐
最新资讯