Mysql

獲取使用者在評分錶中的排名

  • July 24, 2021

我有一個非常簡單的 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,因為他獲得了第三高的分數。

查詢應返回一行,其中(僅)包含所需的排名。

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將有助於大型表的性能。

引用自:https://dba.stackexchange.com/questions/13703