对应的语法是这样的
select row_number() over(partition by col1 order by col2) seq
具体的场景如下:
如果一张表中保存了整个年级的各个班级每个同学的语文成绩
create table Score
(
class varchar2(10),
student varchar2(20),
score int
);
insert into Score values('一班','张三',94);
insert into Score values('一班','李四',84);
insert into Score values('一班','王五',96);
insert into Score values('二班','MARY',76);
insert into Score values('二班','BLUE',84);
insert into Score values('二班','LANCEER',62);
那么我们如果想要这样的效果
序号 班级 学生 分数
1 一班 王五 96
2 一班 张三 94
3 一班 李四 84
1 二班 BLUE 84
2 二班 MARY 76
3 二班 LANCEER 62
那么就是需要用到了组内排序产生序号的功能
select
row_number() over(partition by class order by score desc) seq,
class,student score
from Score
如果我们想获取每个班级的第一名的学生的成绩,只要在外层再套一层seq的过滤,过滤seq=1的记录即可
select *
from
(
select
row_number() over(partition by class order by score desc) seq,
class,student score
from Score
where seq = 1
https://www.cnblogs.com/linJie1930906722/p/6036053.html