1

我正在尝试运行 MySQL 查询以返回有关一组游戏最高分的一些信息。该表设置有以下列:scoreid、score、gameid、playerid、date。当我运行以下 SQL 命令时,它会给出正确的高分,但会返回第一个提交的 playerid 和日期。我在这里做错了什么?

SELECT date, MAX(score) as score, scoreid, playerid FROM scores GROUP BY gameid
4

2 回答 2

3

MAX(score) 不会得到最高分的行。它只会返回最高分数,但所有其他字段都可以简单地属于另一行。

你可以更好地尝试:

SELECT date, score, scoreid, playerid FROM scores GROUP BY gameid HAVING score = MAX(score)
于 2013-05-13T21:56:04.537 回答
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)

在此处查看小提琴。

于 2013-05-13T22:08:32.160 回答