MySql根据数值字段获取数据排名

MySql根据数值字段获取数据排名

前言

HI!这是@不要葱花谢谢的第一篇博客,主要是记录下自己的思路,请多关照~

表内容

赛事分数

表格DDL

CREATE TABLE competition_score (
id bigint(20) NOT NULL COMMENT ‘主键’,
competition_id bigint(20) DEFAULT NULL COMMENT ‘比赛id’,
net_user_id bigint(20) DEFAULT NULL COMMENT ‘用户id’,
score int(11) DEFAULT NULL COMMENT ‘用户分数’,
PRIMARY KEY (id)
) COMMENT=‘赛事分数’;

id:就是单纯的主键
competition_id:多个赛事,用这个id去区分
net_user_id:赛事 id和 net_user_id 是多对多的关系,一个用户能参加多个赛事,一个赛事也能被多个用户参加
score:用户分数,用来获取排名的字段

查询功能实现

SELECT
id, net_user_id, score,
( SELECT count( 1 ) FROM competition_score b WHERE b.score > a.score AND b.competition_id = a.competition_id ) + 1 user_rank
FROM
competition_score a
WHERE
a.competition_id = 20220707001
ORDER BY
user_rank

– rank() over(order by score desc) rank_aaa

下面的rank() 函数也可实现该功能,可自行查找用法

结果:
结果
注意:如果有相同分数,两人排名会一致,且跳过第三人,具体情况具体分析
注意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值