在MySQL中获取具有最大值的条目

时间:2014-04-28 09:20:17

标签: mysql sql

我有一个MySQL数据库,其中包含很多高分数量的游戏。我希望得到“个人最佳”条目,其中包含最高分数。

我找到了一个我认为有效的解决方案,直到我的数据库中有更多名称,然后它返回完全不同的结果。

到目前为止我的代码:

SELECT name, score, date, version, mode, custom
FROM highscore
WHERE score = 
    (SELECT MAX(score) 
             FROM highscore 
             WHERE name = 'jonte' && gamename = 'game1')

对于很多值,这实际上会返回正确的值:

JONTE   240 2014-04-28 02:52:33 1   0   2053    

几百个条目都有效,有些条目名称不同。但是当我添加新条目并将名称换成'gabbes'时,对于新名称,我会获得多个条目的列表。我没有看到这里的逻辑,因为数据库中的条目似乎与数据中的一些差异完全相同。

JONTE   176 2014-04-28 11:03:46 1   0   63  
GABBES  176 2014-04-28 11:09:12 1   0   3087    

以上有两个,但有时它也可能连续返回10-20个条目。

任何帮助?

2 个答案:

答案 0 :(得分:1)

如果你想要每个人的高分(即最好的个人),你可以这样做......

SELECT name, max(score)
FROM highscore
WHERE gamename = 'game1'
GROUP BY name

或者,您可以这样做......

SELECT name, score, date, version, mode, custom
FROM highscore h1
WHERE score = 
    (SELECT MAX(score) 
             FROM highscore h2
             WHERE name = h1.name && gamename = 'game1')

注意:在您的SQL中,您的子条款缺少name = h1.name谓词。

但请注意,如果第二个选项多次记录相同的高分,则第二个选项会为同一个人提供多行。

答案 1 :(得分:0)

返回多个条目,因为多个条目具有相同的高分。您可以添加LIMIT 1以仅获取一个条目。您可以使用ORDER BY子句选择要返回的条目。