oracle分組函式rollup,cube

2021-12-30 05:18:37 字數 1634 閱讀 1325

oracle分組函式rollup,cube

rollup(欄位1,欄位2):

cube(欄位1,欄位2):

rollup(col1,  col2,...)  和  cube(col1,  col2,...)  用法區別在  cube  在  rollup  彙總的記錄集上,還會增加對 col2  等字段的彙總; 

www.2cto.com  

rollup只對第乙個引數(字段)進行彙總,cube可以對引數(字段)依次彙總,所以rollup中引數個數只有乙個會起作用(且排名在前的引數)。

oracle的group by語句除了最基本的語法外,還支援rollup和cube語句。

rollup(a, b, c):

首先會對(a、b、c)進行group by,然後對(a、b)進行group by,然後是(a)進行group by,最後對全表進行group by操作。

cube(a, b, c),則首先會對(a、b、c)進行group by,然後依次是(a、b),(a、c),(a),(b、c),(b),(c),最後對全表進行group by操作。

cube 和 rollup 之間的區別在於: 

cube 生成的結果集顯示了所選列中值的所有組合的聚合。

rollup 生成的結果集顯示了所選列中值的某一層次結構的聚合。 

例子: 

[sql] 

create table student( 

cgrade varchar2(64), 

cclass varchar2(64), 

cgroup varchar2(64), 

stu int )  

[sql] 

insert into student(cgrade,cclass,cgroup,stu) values('1','1','1',10); 

insert into student(cgrade,cclass,cgroup,stu) values('1','2','1',10); 

insert into student(cgrade,cclass,cgroup,stu) values('1','2','2',20); 

insert into student(cgrade,cclass,cgroup,stu) values('2','1','1',30); 

insert into student(cgrade,cclass,cgroup,stu) values('2','2','2',40); 

[sql] 

select * from student; 

[sql] 

select cgrade,cclass,sum(stu) from student group by cgrade,cclass; 

[sql] 

select cgrade,cclass,sum(stu) from student group by cube(cgrade,cclass); 

[sql] 

select decode(grouping(cgrade),1,'學校人數',0,cgrade),decode(grouping(cclass)+grouping(cgrade),1,'年級人數',0,cclass),sum(stu) from student group by rollup(cgrade,cclass); 

Oracle 分組排序函式

專案開發中,我們有時會碰到需要分組排序來解決問題的情況 1 要求取出按field1分組後,並在每組中按照field2排序 2 亦或更加要求取出1中已經分組排序好的前多少行的資料 這裡通過一張表的示例和sql語句闡述下oracle資料庫中用於分組排序函式的用法。1.row number over ro...

Oracle 分組排序函式

專案開發中,我們有時會碰到需要分組排序來解決問題的情況 1 要求取出按field1分組後,並在每組中按照field2排序 2 亦或更加要求取出1中已經分組排序好的前多少行的資料 這裡通過一張表的示例和sql語句闡述下oracle資料庫中用於分組排序函式的用法。1.row number over ro...

Oracle 分組排序函式

專案開發中,我們有時會碰到需要分組排序來解決問題的情況 1 要求取出按field1分組後,並在每組中按照field2排序 2 亦或更加要求取出1中已經分組排序好的前多少行的資料 這裡通過一張表的示例和sql語句闡述下oracle資料庫中用於分組排序函式的用法。1.row number over ro...