oracle分组函数rollup,cube

rollup(字段1,字段2): cube(字段1,字段2): rollup(col1,   col2,...)   和   cube(col1,   col2,...)   用法差异在  cube   在   rollup   汇总的记录集上,还会增加对 col2  等字段的汇总;   ROLLUP只对第一个参数(字段)进行汇总,CUBE可以对参数(字段)顺次汇总,所以ROLLUP中参数个数只要 http://www.aaafaipiao.com/linked/20130313.do 一个会起作用(且排名在前的参数)。 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 生成的成果集显现了所选列中值的某一层次布局的聚合。  比如: create table student(
       cgrade varchar2(64),
       cclass varchar2(64),
       cgroup varchar2(64),
       stu int
) 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); select * from student; select cgrade,cclass,sum(stu) from student group by cgrade,cclass; select cgrade,cclass,sum(stu) from student group by cube(cgrade,cclass); select decode(grouping(cgrade),1,'校园人数',0,cgrade),decode(grouping(cclass) grouping(cgrade),1,'年级人数',0,cclass),sum(stu) from student group by rollup(cgrade,cclass);http://www.aaafaipiao.com/linked/20130313.do
posted @ 2013-03-14 02:37  chinadiy197601  阅读(288)  评论(0编辑  收藏  举报