5

このような「ハイスコア」というテーブルがあります。

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

udid ごとに複数の高得点の一般的なケースである OMG の優れた回答を繰り返すために、udid ごとに正確に 1 つのエントリの前提条件に基づくクエリを次に示します。

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 に答える