>데이터 베이스 >MySQL 튜토리얼 >Oracle分组函数rollup,cube

Oracle分组函数rollup,cube

WBOY
WBOY원래의
2016-06-07 16:47:00868검색

rollup(字段1,字段2): cube(字段1,字段2): rollup(col1, col2,...) 和 cube(col1, col2,...) 用法区别在 cube 在

rollup(字段1,字段2):

cube(字段1,字段2):

rollup(col1,  col2,...)  和  cube(col1,  col2,...)  用法区别在  cube  在  rollup  汇总的记录集上,还会增加对 col2  等字段的汇总;

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 生成的结果集显示了所选列中值的某一层次结构的聚合。

例子:

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);

linux

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.