MySQL,有 returns 个结果

MySQL, HAVING returns single result

我遇到了一个 table 的玩家,看起来像这样:

此处 table 的图像:

我正在尝试 return 总上场时间高于平均水平的球员,我尝试使用 WHERE 代替 HAVING,但出现语法错误。我的代码只是 return 一个玩家,而不是所有超过平均总游戏时间的玩家:

SELECT player.player_name, player.player_team, player.minutes_played 
     FROM player 
         HAVING player.minutes_played > AVG(player.minutes_played);

为什么 return 只有一个?是HAVING的本质吗?

你想要的看起来像这样:

SELECT p.player_name, p.player_team, p.minutes_played 
FROM player p
HAVING p.minutes_played > (SELECT AVG(p2.minutes_played) FROM player p2);

您的查询发生了什么?好吧,首先我要注意问题是 AVG(minutes_played) 而不是 HAVING 子句 本身 。 MySQL 有一个扩展,其中 HAVING 子句本质上被视为 WHERE -- 对于没有聚合的查询。

但是,您的查询包含聚合。它在 HAVING 子句中有 AVG()。这会将查询变成聚合查询,并且因为没有 GROUP BY,查询 returns 正好是一行(不包括 HAVING)。

这回避了这一行中有哪些值的问题。那么,返回 arbitraryindeterminate 行中的列。这也是一个 MySQL 扩展。

您所写的查询不标准 SQL,但由于有两个扩展,它在 MySQL 中被接受。这样做时,查询是一个没有 GROUP BY 的聚合查询,因此查询 returns 一行(如果不满足 HAVING 条件,则可能是零行)。