Mysql 具有排名可变顺序的评分表并保持排名
假设我们有一个体育比赛的分数表:Mysql 具有排名可变顺序的评分表并保持排名,mysql,Mysql,假设我们有一个体育比赛的分数表: ----------------------------------------- nickname | challenge | score | rank ----------------------------------------- Sporty | 3 | 37283 | 1 Performer | 2 | 32319 | 2 John | 5 | 21
-----------------------------------------
nickname | challenge | score | rank
-----------------------------------------
Sporty | 3 | 37283 | 1
Performer | 2 | 32319 | 2
John | 5 | 21021 | 3
Sandra | 3 | 12320 | 4
我使用的查询:
SELECT nickname,
challenge,
score,
@rank := @rank + 1 AS rank FROM rankings,
(SELECT @rank := 0) r
ORDER BY rank desc
我想对所有列重新排序,但保留按分数排列的列。例如
表格应按昵称排序,如下所示:
-----------------------------------------
nickname | challenge | score | rank
-----------------------------------------
John | 5 | 21021 | 3
Performer | 2 | 32319 | 2
Sandra | 3 | 12320 | 4
sporty | 3 | 37283 | 1
我使用的是MySQL 5.7,所以我不能使用MySQL 8中的排名功能。
如何实现此目标?使用子查询:
SELECT nickname, challenge, score, rnk
FROM
(
SELECT nickname, challenge, score,
@rank := @rank + 1 AS rnk
FROM rankings, (SELECT @rank := 0) r
ORDER BY rnk DESC
) t
ORDER BY nickname;
这里的想法是首先在子查询中具体化排名列。然后,我们可以通过外面的其他专栏来订购。请注意,我避免使用别名
rank
,因为从MySQL开始,rank
是一个分析函数的名称。很好,谢谢。但是,当我尝试在子查询中添加联接时,排序不再正常工作。可能您必须将子查询本身联接到另一个表,然后(第二次)进行子查询以执行所需的排序。如果你有其他要求,我建议你问一个新问题,这个问题已经回答了。