rank 开窗函数_Oracle 的开窗函数 rank,dense_rank,row_number

   日期:2024-12-28    作者:oepxs 移动:http://mip.riyuangf.com/mobile/quote/76430.html

1、开窗函数和分组函数的区别

rank 开窗函数_Oracle 的开窗函数 rank,dense_rank,row_number

分组函数是指按照某列或者某些列分组后进行某种计算,比如计数,求和等聚合函数进行计算。

开窗函数是指基于某列或某些列让数据有序,数据行数和原始数据数相同,依然能曾现个体数据的原貌。

事例数据

create table student_scores(

stu_id varchar2(10),--学号

stu_name varchar2(20),--姓名

course varchar2(5),--课程

score number(5,2),--分数

constraint pk_stuid_course primary key (stu_id,course)

);

insert into student_scores(stu_id,stu_name,course,score) values(‘10001‘,‘周杰伦‘,‘语文‘,‘85‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10001‘,‘周杰伦‘,‘数学‘,‘96‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10001‘,‘周杰伦‘,‘英语‘,‘67‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10002‘,‘谢霆锋‘,‘语文‘,‘71‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10002‘,‘谢霆锋‘,‘数学‘,‘97‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10002‘,‘谢霆锋‘,‘英语‘,‘100‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10003‘,‘苏有朋‘,‘语文‘,‘79‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10003‘,‘苏有朋‘,‘数学‘,‘65‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10003‘,‘苏有朋‘,‘英语‘,‘80‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10004‘,‘刘德华‘,‘语文‘,‘41‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10004‘,‘刘德华‘,‘数学‘,‘61‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10004‘,‘刘德华‘,‘英语‘,‘62‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10005‘,‘小龙女‘,‘语文‘,‘94‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10005‘,‘小龙女‘,‘数学‘,‘95‘);

insert into student_scores(stu_id,stu_name,course,score) values(‘10005‘,‘小龙女‘,‘英语‘,‘96‘);

2、分组函数:group by

按照课程进行分组,可以进行如下计算

select course,count(*) cou,avg(score) avgs,max(score) maxs,min(score) mins

from student_scores

group by course;

COURSE COU AVGS MAXS MINS

1 数学 5 82.8 97 61

2 语文 5 74 94 41

3 英语 5 81 100 62

3、开窗函数:rank() ,dense_rank(),row_number()

每个学科按照分数倒序排名

select stu_id,stu_name,course,score,rank() over(partition by course order by score desc) rankfrom student_scores;

STU_ID STU_NAME COURSE SCORE RANK

1 10002 谢霆锋 数学 97.00 1

2 10001 周杰伦 数学 96.00 2

3 10005 小龙女 数学 95.00 3

4 10003 苏有朋 数学 65.00 4

5 10004 刘德华 数学 61.00 5

6 10002 谢霆锋 英语 100.00 1

7 10005 小龙女 英语 96.00 2

8 10003 苏有朋 英语 80.00 3

9 10001 周杰伦 英语 67.00 4

10 10004 刘德华 英语 62.00 5

11 10005 小龙女 语文 94.00 1

12 10001 周杰伦 语文 85.00 2

13 10003 苏有朋 语文 79.00 3

14 10002 谢霆锋 语文 71.00 4

15 10004 刘德华 语文 41.00 5

注意分组函数和开窗函数针对数据在维度上的变化,分组函数使个体数据小时。开窗函数保留个体。


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号