ITPub博客

首页 > 数据库 > Oracle > oracle分析函数ROLLUP\CUBE

oracle分析函数ROLLUP\CUBE

原创 Oracle 作者:sunjianfeng610 时间:2014-06-20 10:41:42 0 删除 编辑
1、rollup使用
1)创建表
create table emp_test (empid int, depno varchar2(10),  position varchar2(20),username varchar2(10), salary int);
2)准备数据
insert into emp_test values (1,'dep1','销售' , '刘能',1300);
insert into emp_test values (2,'dep1','开发工程师' , '赵四',2000);
insert into emp_test values (3,'dep1','系统建构' , '旺财',1800);
insert into emp_test values (4,'dep1','技术总监' , '王大拿',10000);

insert into emp_test values (5,'dep2', '销售' ,'长贵',3000);
insert into emp_test values (6,'dep2', '开发工程师' ,'王老七',5000);
insert into emp_test values (7,'dep2', '系统建构' ,'谢广坤',2500);
insert into emp_test values (8,'dep2', '技术总监' ,'玉田',3500);

insert into emp_test values (9,'dep3',  '销售' ,    '刘一水',3300);
insert into emp_test values (10,'dep3', '开发工程师' ,'李大国',3800);
insert into emp_test values (11,'dep3', '系统建构' ,    '谢大脚',2800);
insert into emp_test values (12,'dep3', '技术总监' ,    '王云',1500);

insert into emp_test values (13,'dep4', '销售' ,    '王木生',4000);
insert into emp_test values (14,'dep4', '开发工程师' ,'大脑袋',8000);
insert into emp_test values (15,'dep4', '系统建构' ,    '天来',6000);
insert into emp_test values (16,'dep4', '技术总监' ,    '乔峰',10000);

3)用group by的分组效果,按照部门进行分组
select depno,sum(salary) from emp_test group by depno  order by 1;
dep1 15100
dep2 14000
dep3 11400
dep4 28000

4)用rollup的分组效果,按照部门分组,并最终计算合计数据
select nvl(depno,'合计'),sum(salary) from emp_test group by rollup(depno)  order by 1;
dep1 15100
dep2 14000
dep3 11400
dep4 28000
合计 68500

5)用rollup求部门小计,最后再求总计
select nvl(depno,'总合计') ,position,sum(salary) from emp_test group by rollup(depno,position) order by 1,2;
dep1       技术总监                10000
dep1       开发工程师              2000
dep1       系统建构                1800
dep1       销售                    1300
dep1                               15100
dep2       技术总监                3500
dep2       开发工程师              5000
dep2       系统建构                2500
dep2       销售                    3000
dep2                               14000
dep3       技术总监                1500
dep3       开发工程师              3800
dep3       系统建构                2800
dep3       销售                    3300
dep3                               11400
dep4       技术总监                10000
dep4       开发工程师              8000
dep4       系统建构                6000
dep4       销售                    4000
dep4                               28000
总合计                             68500


2、cube与rollup的区别,
select depno,position,sum(salary) from emp_test group by cube(depno,position) order by 1,2;

dep1       技术总监                   10000
dep1       开发工程师                 2000
dep1       系统建构                   1800
dep1       销售                       1300
dep1                                  15100
dep2       技术总监                   3500
dep2       开发工程师                 5000
dep2       系统建构                   2500
dep2       销售                       3000
dep2                                  14000
dep3       技术总监                   1500
dep3       开发工程师                 3800
dep3       系统建构                   2800
dep3       销售                       3300
dep3                                  11400
dep4       技术总监                   10000
dep4       开发工程师                 8000
dep4       系统建构                   6000
dep4       销售                       4000
dep4                                  28000
           技术总监                   25000
           开发工程师                 18800
           系统建构                   13100
           销售                       11600
                                      68500

cube比rollup统计信息多了最后四行。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9830023/viewspace-1189723/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: ORACLE ROWID解析
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-05-26

  • 博文量
    5
  • 访问量
    18770