Mysql8 分组排序取第一个

准备

create table test.class
(
    class_id int auto_increment
        primary key,
    name     varchar(20) null
);

create table test.student
(
    student_id   int auto_increment
        primary key,
    student_name varchar(20) null,
    class_id     int         null,
    score        int         null
);

student_idstudent_nameclass_idscore
1大王19
2小王19
3大小王29

根据班级取分数第一个的

1. RANK()

select *
from (select *, RANK() over (PARTITION BY class_id order by student.score DESC) ranks from student) as f
where f.ranks = 1;

结果:

student_idstudent_nameclass_idscoreranks
1大王191
2小王191
3大小王291

RANK()会把得分相同的都显示

2.ROW_NUMBER()

select *
from
(select *, ROW_NUMBER() over (PARTITION BY class_id order by student.score DESC) rn from student)
    as f
where rn = 1

结果:

student_idstudent_nameclass_idscorern
1大王191
3大小王291
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值