oracle数据库rankover用法,Oracle中rank()over()的用法
oracle数据库rankover⽤法,Oracle中rank()over()的⽤法之前整理了rank() over()的⽤法,但是,今天遇到了问题,居然还是不会,这⾥再重新学习⼀下。
1. rank()函数
rank是等级的意思,rank()函数是⼀个聚合函数,也是⼀个分析函数。
之前只知道,rank()函数可以和over()⼀起使⽤,⽤来排序什么的,原来还有这些知识
,孤陋寡闻了。
准备⼯作:
新建⼀个表
-- Create table
create table T_YGY_DEMO_SCORE
(
ID NUMBER(11),
COURSE VARCHAR2(10),
SCORE NUMBER(5,2),
NAME VARCHAR2(20)
)
-- Add comments to the table
comment on table T_YGY_DEMO_SCORE
is '学⽣成绩表';
-- Add comments to the columns
comment on column T_YGY_DEMO_SCORE.ID
is 'ID';
comment on column T_YGY_DEMO_SCORE.COURSE
is '课程名';
comment on column T_YGY_DEMO_SCORE.SCORE
is '分数';
comment on column T_YGY_DEMO_SCORE.NAME
is '学⽣姓名';
数据:
insert into T_YGY_DEMO_SCORE (ID, COURSE, SCORE, NAME)
values (1, '数学', 100, '路飞');
insert into T_YGY_DEMO_SCORE (ID, COURSE, SCORE, NAME)
values (2, '数学', 90, '索隆');
insert into T_YGY_DEMO_SCORE (ID, COURSE, SCORE, NAME)
values (3, '数学', 80, '乔巴');
insert into T_YGY_DEMO_SCORE (ID, COURSE, SCORE, NAME)
values (4, '语⽂', 90, '路飞');
insert into T_YGY_DEMO_SCORE (ID, COURSE, SCORE, NAME)
values (5, '语⽂', 90, '索隆');
insert into T_YGY_DEMO_SCORE (ID, COURSE, SCORE, NAME)
values (6, '语⽂', 80, '乔巴');
rank函数的用法insert into T_YGY_DEMO_SCORE (ID, COURSE, SCORE, NAME)
values (7, '英语', 90, '路飞');
insert into T_YGY_DEMO_SCORE (ID, COURSE, SCORE, NAME)
values (8, '英语', 80, '索隆');
insert into T_YGY_DEMO_SCORE (ID, COURSE, SCORE, NAME)
values (9, '英语', 80, '乔巴');
数据显⽰:
2. 作为聚合函数的⽤法
实现功能:根据order by 后⾯的字段排序后,在rank()中指定的数据的记录顺序号(就是排在第⼏名)
⽰例:
根据id排序后,id是4的记录的位置
select rank(4) within group(order by id) "location" from t_ygy_demo_score;
注意:这⾥的rank()的参数和order by 后的参数数量需要⼀致。
3. 作为分析函数的⽤法
功能:
分析每个记录的排序或等级,rank()值相同时排名相同,其后排名跳跃不连续
⽰例:
1)查询出每门课程的学⽣排名,并且显⽰出名次
不显⽰名次的话,我们在where后,使⽤order by 就可以实现,但是显⽰名次的话,就不⾏了,
select id,course,name,score ,rank() over(partition by course order by score desc)"名次" from t_ygy_demo_score;他这⾥的排名,分数相同的排名是相同的名次是相同的。
2)按照name排序,并显⽰排名(虽然没什么意义)
select id,name,course,score ,rank() over(order by name) "名次" from t_ygy_demo_score;
3) 查询出每门课程的最⾼分的信息
select * from (select id ,name,course,score,rank() over(partition by course order by score desc) rank from t_ygy_demo_score) rs where rs.rank=1;
4. 总结
1、partition  by⽤于给结果集分组,如果没有指定那么它把整个结果集作为⼀个分组。
2、Rank 是在每个分组内部进⾏排名的。
5. 附录
可以参考的⽂章:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。