0

私はこのテーブルを持っています

ここに画像の説明を入力

降順で並べられた最高スコアの 10 個の個別の行が必要です。だから私は試しました

SELECT * FROM `highscores` GROUP BY userID  ORDER BY score DESC LIMIT 10  ;

次を返すため、これは正しくありません。

ここに画像の説明を入力

それから私は試しました:

SELECT distinct(userID),userName,userLastname,score FROM高得点ORDER BY score DESC ;

userID に基づいて個別の行を実際には返さないため、これも正しくありません。

ここに画像の説明を入力

そして、これは私が望む結果です:

ここに画像の説明を入力

userID最初の 10 人のプレーヤーについて、各プレーヤーの最高得点 (異なる ) を保持したいと考えています。どうすればそれを行うことができますか?

4

5 に答える 5

0

これを試して:

SELECT  userID,userName,userLastname, MAX(score) as score 
 FROM highscores 
  WHERE userID in (
    SELECT distinct userID FROM highscores )
  ORDER BY score DESC
  LIMIT 10;
于 2013-10-22T05:31:31.887 に答える
0

正しいクエリは次のとおりです。

SELECT userName, userLastname, userID, MAX( score ) 
FROM  `highscores` 
GROUP BY userID
ORDER BY MAX( score ) DESC 
LIMIT 10

EddieJamsession のコメントに感謝します。

于 2013-10-23T18:52:52.127 に答える
0

MySQL では、複数の列で DISTINCT 演算子を使用できます。すべての列の組み合わせは、結果セット内の行の一意性を定義するために使用されます。

たとえば、customers テーブルから市と州の一意の組み合わせを取得するには、次のクエリを使用します。

SELECT DISTINCT state, city FROM customers WHERE state IS NOT NULL ORDER BY state, city

于 2013-10-22T05:13:21.930 に答える
0

あなたの質問の更新に基づいて:

SELECT h1.* FROM highscores h1
LEFT JOIN highscores h2 ON h1.userId = h2.userId and h1.score < h2.score
WHERE h2.score IS NULL
ORDER BY h1.score DESC
LIMIT 10

別のアプローチは次のようになります。

SELECT h1.* FROM highscores h1
JOIN (
    SELECT userId, max(score) maxScore FROM highscores
    GROUP BY userId
) h2 ON h1.userId = h2.userId and h1.score = h2.maxScore
ORDER BY h1.score DESC
LIMIT 10
于 2013-10-22T05:21:28.487 に答える