MYSQL实现Rank成绩排名(重叠自增)

 Coding
Likt
  208

在MYSQL普通排序下,成绩排名难以准确输出(序号++,但成绩相同并没有名次等同)
本篇文章介绍通过SQL语句判断,实现直接输出排名数据。

现假设情况如下:

idnamescore
1firstname100
2secondname80
3thirdname80
4fourthname60
SET @k=0;
SELECT
tmp.id,tmp.name,tmp.score,
-- 顺序一直在变大
@j:=@j+1 AS j,
-- 只有在前后二次排序值不同时才会使用顺序号
@k:=(CASE WHEN @pre_score=tmp.score THEN @k ELSE @j END) AS rank,
@pre_score:=tmp.score AS pre_score
FROM
(
-- 成绩排序
SELECT * FROM score ORDER BY score DESC
) tmp,
-- @k 表示最终的排名(相同值时序号相同)
-- @j 表示顺序排名
-- @pre_score上一次排序值
(SELECT @k :=0,@j:=0, @pre_score:=0) sdcore
根据《互联网跟帖评论服务管理规定》,您需要登录后才能进行留言,您的相关信息由畅言云评进行采集,感谢您的配合。