前言
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() 函数也可实现该功能,可自行查找用法
结果:
注意:如果有相同分数,两人排名会一致,且跳过第三人,具体情况具体分析