Oracle的ROLLUP和CUBE
/*
Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。
*/
--创建表
create table fzq
(
name varchar(20),
calss varchar(2),
kemu varchar(4),
chengji varchar(3)
)
--插入数据
insert into fzq values
('11','1','数学','90');
insert into fzq values
('11','1','语文','68');
insert into fzq values
('12','1','数学','90');
insert into fzq values
('12','1','语文','88');
insert into fzq values
('22','2','数学','70');
insert into fzq values
('22','2','语文','88');
insert into fzq values
('33','2','数学','95');
insert into fzq values
('33','2','语文','98');
/*
rollup 统计方式效果:
CALSSNAMESUM(CHENGJI)
111158
112178
1336
222158
233193
2351
687
首先是根据calss和name分组求和
然后在根据calss分组求和
最后对全表进行GROUP BY操作求和。
*/
select calss,name,sum(chengji) from fzq
group by rollup(calss,name)
order by calss,name;
/*
CUBE 统计方式效果:
NAMECALSSSUM(CHENGJI)
111158
11158
121178
12178
222158
22158
332193
33193
1336
2351
687
首先是根据name和calss分组求和
然后在根据name分组求和
然后在根据calss分组求和
最后对全表进行GROUP BY操作求和。
*/
select name,calss,sum(chengji) from fzq
group by cube(name,calss)
order by name,calss;
/*
可以调成group by 中name和calss的顺序,
大家看看效果。
*/