我正在尝试运行MySQL查询以返回有关一组游戏的最高分的一些信息。该表格设置为包含以下列:scoreid,score,gameid,playerid,date。当我运行以下SQL命令时,它给了我适当的高分,但返回第一个提交的playerid和日期。我在这里做错了什么?
SELECT date, MAX(score) as score, scoreid, playerid FROM scores GROUP BY gameid
答案 0 :(得分:3)
MAX(得分)不会获得具有最高分数的行。它只会返回最大分数,但所有其他字段只能属于另一行。
你可以更好地尝试:
SELECT date, score, scoreid, playerid FROM scores GROUP BY gameid HAVING score = MAX(score)
答案 1 :(得分:1)
您正在按gameid进行分组,但是您要返回一些非聚合列(date
,scoreid
,playerid
)。 MySQL允许您通过查询选择组中的非聚合列,但这些列的值将不确定(它通常会返回第一个遇到的值,但这没有记录,您不能依赖它) 。 Score
已聚合(您正在使用MAX()
这是一个聚合函数),因此其值将是正确的。
如果要返回所有具有最高分数的行,则应使用如下查询:
SELECT date, score, scoreid, playerid
FROM scores
WHERE score = (SELECT MAX(score) FROM scores)
或者如果你想返回每个gameid具有最高分数的行,可以这样:
SELECT date, score, scoreid, playerid
FROM scores
WHERE (gameid, score) IN (SELECT gameid, MAX(score) FROM scores GROUP BY gameid)
请参阅小提琴here。