当前位置:数据库 > Oracle >>

oracle分组函数rollup,cube

oracle分组函数rollup,cube
 
rollup(字段1,字段2):
cube(字段1,字段2):
rollup(col1,  col2,...)  和  cube(col1,  col2,...)  用法区别在  cube  在  rollup  汇总的记录集上,还会增加对 col2  等字段的汇总; 
  www.zzzyk.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
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,