MySQL,返回单个结果
我面对着一张球员的桌子,看起来是这样的: 此处的表格图像:MySQL,返回单个结果,mysql,sql,mysql-workbench,having,Mysql,Sql,Mysql Workbench,Having,我面对着一张球员的桌子,看起来是这样的: 此处的表格图像: 我试图返回的球员谁发挥了高于平均水平的总播放时间,我试图使用何处,而不是有,但我得到了一个语法错误。我的代码只返回一个玩家,而不是在平均总播放时间内播放的所有玩家: SELECT player.player_name, player.player_team, player.minutes_played FROM player HAVING player.minutes_played > AVG(p
我试图返回的球员谁发挥了高于平均水平的总播放时间,我试图使用何处,而不是有,但我得到了一个语法错误。我的代码只返回一个玩家,而不是在平均总播放时间内播放的所有玩家:
SELECT player.player_name, player.player_team, player.minutes_played
FROM player
HAVING player.minutes_played > AVG(player.minutes_played);
为什么它只返回一个?这是拥有的本质吗?你想要的是这样的:
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\u played)
,而不是本身具有
子句。MySQL有一个扩展,其中一个HAVING
子句本质上被视为where
——用于一个没有聚合的查询
但是,您的查询具有聚合。它在HAVING子句中有AVG()
。这会将查询转换为聚合查询,因为没有分组依据
,因此查询只返回一行(不计算具有的)
这就引出了一个问题,那一行中有哪些值。返回任意和不确定行中的列。这也是一个MySQL扩展
您编写的查询不是标准SQL,但由于有两个扩展,MySQL接受了它。这样做时,查询是一个聚合查询,没有分组依据
,因此查询返回一行(如果不满足具有
条件,则可能返回零行)。不发布图像。将相关信息放在文本中,以便与GROUP BY一起使用-为什么不直接使用WHERE?分享你得到的错误-这是基于你所分享的内容的方法。我之所以使用have而不是have,是因为错误代码:1111。组函数的使用无效。我想我之所以会出现这个错误,是因为你不能在聚合函数上使用WHERE(比如使用AVG())。这似乎是可行的-谢谢你的额外解释@Gordon Linoff!与您的评论相反,groupby似乎不需要返回多个查询。我不完全确定返回任意和不确定行是什么意思,为什么这是一个MySQL扩展?此代码在其他RDBMS中不起作用吗?@will.i.may.be。此代码在其他数据库中不起作用。