一尘不染

获取用户在评分表中的排名

mysql

我有一个非常简单的 MySQL 表,用于保存高分。它看起来像这样:

Id     Name     Score

到目前为止,一切都很好。问题是:我如何获得用户排名?例如,我有一个用户NameId想要获得他的排名,其中所有行都是按顺序降序排列的Score.

一个例子

Id  Name    Score
1   Ida     100
2   Boo     58
3   Lala    88
4   Bash    102
5   Assem   99

在这种情况下,Assem的排名将是 3,因为他获得了第三高的分数。

查询应返回一行,其中(仅)包含所需的排名。


阅读 77

收藏
2022-10-21

共1个答案

一尘不染

SELECT id, name, score, FIND_IN_SET( score, (
SELECT GROUP_CONCAT( score
ORDER BY score DESC ) 
FROM scores )
) AS rank
FROM scores

给出了这个列表:

id name  score rank
1  Ida   100   2
2  Boo    58   5
3  Lala   88   4
4  Bash  102   1
5  Assem  99   3

获得单人分数:

SELECT id, name, score, FIND_IN_SET( score, (    
SELECT GROUP_CONCAT( score
ORDER BY score DESC ) 
FROM scores )
) AS rank
FROM scores
WHERE name =  'Assem'

给出这个结果:

id name score rank
5 Assem 99 3

您将进行一次扫描以获取分数列表,然后进行另一次扫描或尝试对它做一些有用的事情。列上的索引score将有助于大型表的性能。

2022-10-21