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...