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
)。
这回避了这一行中有哪些值的问题。那么,返回 arbitrary 和 indeterminate 行中的列。这也是一个 MySQL 扩展。
您所写的查询不标准 SQL,但由于有两个扩展,它在 MySQL 中被接受。这样做时,查询是一个没有 GROUP BY
的聚合查询,因此查询 returns 一行(如果不满足 HAVING
条件,则可能是零行)。
我遇到了一个 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
)。
这回避了这一行中有哪些值的问题。那么,返回 arbitrary 和 indeterminate 行中的列。这也是一个 MySQL 扩展。
您所写的查询不标准 SQL,但由于有两个扩展,它在 MySQL 中被接受。这样做时,查询是一个没有 GROUP BY
的聚合查询,因此查询 returns 一行(如果不满足 HAVING
条件,则可能是零行)。