oracle 分析函数 cube,Oracle分析函数 — sum, rollup, cube, grouping用法

本文详细介绍了Oracle数据库中用于数据分组的高级函数,包括SUM、ROLLUP、CUBE和GROUPING函数的使用方法。通过具体的SQL查询示例,展示了如何对数据进行多级分组和聚合,以及如何利用GROUPING函数处理分组结果中的NULL值。文章还对比了ROLLUP和CUBE的区别,并提供了实用的查询技巧。
摘要由CSDN通过智能技术生成

本文通过例子展示sum, rollup, cube, grouping的用法。

//首先建score表

create table score(

class  nvarchar2(20),

course   nvarchar2(20),

stu_no  number(5),

stu_name nvarchar2(20),

score   number(2));

//插入数据

insert into score values ('Class_A','Math',10001,'Tough1',95);

insert into score values ('Class_A','Math',10002,'Tough2',93);

insert into score values ('Class_B','Math',10003,'Tough3',94);

insert into score values ('Class_B','Math',10004,'Tough4',88);

insert into score values ('Class_A','Computer',10001,'Tough1',89);

insert into score values ('Class_A','Computer',10002,'Tough2',98);

insert into score values ('Class_B','Computer',10003,'Tough3',89);

insert into score values ('Class_B','Computer',10004,'Tough4',87);

SELECT * FROM score;

CLASS

COURSE

STU_NO

STU_NAME

SCORE

Class_A

Math

10001

Tough1

95

Class_A

Math

10002

Tough2

93

Class_B

Math

10003

Tough3

94

Class_B

Math

10004

Tough4

88

Class_A

Computer

10001

Tough1

89

Class_A

Computer

10002

Tough2

98

Class_B

Computer

10003

Tough3

89

Class_B

Computer

10004

Tough4

87

sum函数

按class,course分组,然后对score统计总合

select class,course,sum(score)/count(*) "AVG_SCORE"

from score

group by class,course;

CLASS

COURSE

AVG_SCORE

Class_B

Math

91

Class_A

Computer

93.5

Class_A

Math

94

Class_B

Computer

88

rollup函数

先按class,course分组汇总;再按class分组汇总;最后全表分组汇总

select class,course,sum(score)/count(*) "AVG_SCORE"

from score

group by rollup(class,course);

CLASS

COURSE

AVG_SCORE

Class_A

Math

94

Class_A

Computer

93.5

Class_A

93.75

Class_B

Math

91

Class_B

Computer

88

Class_B

89.5

91.625

cube函数

先按class,course分组汇总;再按class分组汇总;再按course分组汇总;最后全表分组汇总

select class,course,sum(score)/count(*) "AVG_SCORE"

from score

group by cube(class,course)

order by class,course nulls last;

CLASS

COURSE

AVG_SCORE

Class_A

Computer

93.5

Class_A

Math

94

Class_A

93.75

Class_B

Computer

88

Class_B

Math

91

Class_B

89.5

Computer

90.75

Math

92.5

91.625

rollup和cube区别:

ROLLUP(A,B,C)的话,GROUP BY顺序

(A,B,C)

(A,B)

(A)

最后对全表进行GROUP BY操作。

GROUP BY CUBE(A, B, C),GROUP BY顺序

(A,B,C)

(A,B)

(A,C)

(A),

(B,C)

(B)

(C),

最后对全表进行GROUP BY操作。

grouping函数

rollup和cube函数都会对结果集产生null,这时候可用grouping函数来确认该记录是由哪个字段得出来的。grouping函数用法,带一个参数,参数为字段名,结果是根据该字段得出来的就返回1,反之返回0

select decode(grouping(class), 1, 'All Class', class) "CLASS",

decode(grouping(course), 1, 'All Course', course) "COURSE",

sum(score) / count(*) "AVG_SCORE"

from   score

group  by cube(class, course)

order  by class, course nulls last;

CLASS

COURSE

AVG_SCORE

All Class

All Course

91.625

All Class

Computer

90.75

All Class

Math

92.5

Class_A

All Course

93.75

Class_A

Computer

93.5

Class_A

Math

94

Class_B

All Course

89.5

Class_B

Computer

88

Class_B

Math

91

[转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值