標籤:
分析函數cube和rollup魅力
首先請看下面例子
1)建立表
create table group_test (group_id int, job varchar2(10), name varchar2(10), salary int);
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;
select t.group_id, sum(t.salary) from group_test t group by t.group_id order by 1;
3)查看rollup函數
select t.group_id, sum(t.salary) from group_test t group by rollup(t.group_id)order by 1; select t.group_id,job, sum(t.salary) from group_test t group by rollup(t.group_id,job) order by 1;
4)查看cube函數
select t.group_id, sum(t.salary) from group_test t group by cube(t.group_id)order by 1;
由此可見rollup以及cude函數是group by函數的擴充,方便用來做小計的分析函數
仔細觀察兩個函數的細微差別
rollup(a,b) 統計列包含:(a,b)、(a)、()
rollup(a,b,c) 統計列包含:(a,b,c)、(a,b)、(a)、()
……以此類推ing……
cube(a,b) 統計列包含:(a,b)、(a)、(b)、()
cube(a,b,c) 統計列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()
……以此類推ing……
替換成原始的group by字句實際就是union all了不區分ID的一個小匯總。
Oracle分組函數cube VS rollup