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 ;

这也不正确,因为它并没有真正根据用户 ID 返回不同的行。

在此处输入图像描述

这就是我想要的结果:

在此处输入图像描述

我想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 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 回答
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
SELECT  a.*
FROM    highscore a
        INNER JOIN
        (
            SELECT  userID, MAX(score) score
            FROM    highscore
            GROUP   BY userID
        ) b ON  a.userID = b.userID 
                AND a.score = b.score
ORDER   BY score DESC
LIMIT   10

但是,这不处理关系。

于 2013-10-22T05:11:47.267 回答
0

在 MySQL中,您可以将 DISTINCT 运算符用于多列。所有列的组合将用于定义结果集中行的唯一性。

例如,要从客户表中获取城市和州的唯一组合,您可以使用以下查询:

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

于 2013-10-22T05:13:21.930 回答