您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Oracle分组函数rollup,cube

2025/11/6 17:32:44发布16次查看
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);

该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product