1

次のデータを含む users テーブルがあります。

+----+------------+--------------+--------------+- --------------+
| | ID | 名前 | ポイント ゲーム 1 | ポイント ゲーム 2 | ポイントゲーム3 |
+----+------------+--------------+--------------+- --------------+
| | 1 | プレーヤー 1 | 10 | 0 | 5 |
| | 2 | プレーヤー 2 | 0 | 25 | 0 |
| | 3 | プレーヤー 3 | 30 | 3 | 0 |
| | 4 | プレーヤー 4 | 0 | 0 | 20 |
+----+------------+--------------+--------------+- --------------+

ランキングは、ゲームごとのランキングではなく、全体の最高スコアとして定義されます。したがって、上記の例では、この結果を表示するためにどのクエリを使用すればよいでしょうか。

+----+------------+-------+----------------+
| | ID | 名前 | スコア | ゲーム | ゲーム |
+----+------------+-------+----------------+
| | 3 | プレーヤー 3 | 30 | ポイント ゲーム 1 |
| | 2 | プレーヤー 2 | 25 | ポイント ゲーム 2 |
| | 4 | プレーヤー 4 | 20 | ポイントゲーム3 |
| | 1 | プレーヤー 1 | 10 | ポイント ゲーム 1 |
+----+------------+-------+----------------+
4

1 に答える 1

0

次のクエリはあなたの質問に答えます:

SELECT 
  id, 
  name, 
  GREATEST(points_game1, points_game2, points_game3) AS score,
  CASE
    WHEN points_game1 = GREATEST(points_game1, points_game2, points_game3) THEN 'points_game1'
    WHEN points_game2 = GREATEST(points_game1, points_game2, points_game3) THEN 'points_game2'
    WHEN points_game3 = GREATEST(points_game1, points_game2, points_game3) THEN 'points_game3'
  END AS game
FROM
  users
ORDER BY 
  3 DESC

GREATEST(...) 計算の反復性のため、少し大雑把です。それをサブクエリに入れたいと思うかもしれません。

いずれにしても、ORDER BY は列に対して関数を使用するため、このクエリはテーブルのインデックスを使用しないことに注意してください。これにより、MySQL でのキーの使用が無効になります。

于 2012-07-06T17:39:56.157 に答える