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);更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12Oracle 索引访问方式MySQL 5.6 MEMCACHED API 体验相关资讯 Oracle函数 Oracle分组函数 Oracle rollup cube
- Oracle字符串函数总结 (06月20日)
- Oracle lag()与lead() 函数 (12/01/2015 20:41:24)
- Oracle ascii函数 (07/26/2015 08:46:01)
| - Oracle使用简单函数 (06月09日)
- REGEXP_SUBSTR函数的整理 (08/20/2015 20:41:01)
- Oracle dump函数 (07/26/2015 08:40:01)
|
本文评论 查看全部评论 (0)