5

我有一张名为“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

给定一个特定的 udid,我想通过他们的分值返回该行的排名。

即如果 udid given = 0000,我应该返回 5。

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

4

2 回答 2

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

要查看与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'

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

于 2010-01-28T21:17:34.497 回答
1

为了重申 OMG 的出色答案,即每个 udid 多个高分的一般情况,这里是基于每个 udid 恰好一个条目的前提条件的查询:

SELECT rank
FROM
   (SELECT @rownum := @rownum + 1 AS rank, score, udid
    FROM highscores
    JOIN (SELECT @rownum := 0) r
    ORDER BY highscores.score DESC) x
WHERE x.udid = '0000'
于 2010-01-28T22:15:22.147 回答