在MySQL表中显示单个排名

5 mysql sql ranking analytic-functions rank

我有一个名为'highscores'的表,看起来像这样.

id      udid       name       score
1       1111       Mike       200
2       3333       Joe        300
3       4444       Billy      50
4       0000       Loser      10
5       DDDD       Face       400
Run Code Online (Sandbox Code Playgroud)

给定一个特定的udid,我想按其得分值返回该行的等级.

即如果udid给定= 0000,我应该返回5.

知道如何为MySQL数据库编写此查询吗?

OMG*_*ies 7

MySQL没有任何分析/排名功能,但您可以使用变量人为创建排名值:

  SELECT t.id,
         t.udid,
         t.name,
         t.score,
         @rownum := @rownum + 1 AS rank
    FROM HIGHSCORES t
    JOIN (SELECT @rownum := 0) r
ORDER BY t.score DESC
Run Code Online (Sandbox Code Playgroud)

要查看与UDID"0000" 相关联的排名,请使用:

SELECT MAX(x.rank) AS rank
  FROM (SELECT t.id,
               t.udid,
               t.name,
               t.score,
               @rownum := @rownum + 1 AS rank
          FROM HIGHSCORES t
          JOIN (SELECT @rownum := 0) r
      ORDER BY t.score DESC) x
 WHERE x.udid = '0000'
Run Code Online (Sandbox Code Playgroud)

MAX如果用户有多个高分值,则需要for.或者,您无法使用MAX和使用ORDER BY rank LIMIT 1.