MySQL 错误 #1111
Posted
技术标签:
【中文标题】MySQL 错误 #1111【英文标题】:MySQL Error #1111 【发布时间】:2016-03-29 23:26:45 【问题描述】:我有一个球员表现表,我想返回每个球员的最高分,如果他们在达到这个分数时没有出局,则在其后添加一个星号 ('*')。这是我到目前为止构建的查询,但它给了我错误 #1111:对组函数的无效使用
SELECT player_id, players.name,
COUNT( * ) AS matches,
SUM( score ) AS runs,
(SELECT IF(is_out = 0, CONCAT(MAX(score),'*'), MAX(score)) FROM batting WHERE score = MAX(score) ) AS high
FROM batting
RIGHT JOIN players ON batting.player_id = players.p_id
WHERE player_id <> 0
GROUP BY player_id
我看过其他时候出现此错误,它应该表明何时通过 MAX/MIN 函数执行 SUM 函数,但我看不到查询中发生这种情况的位置
我哪里出错了,我将如何纠正这个问题,grma
【问题讨论】:
我怀疑错误与从击球中选择 MAX(score) 的子查询有关 @Yottatron 如果我在 IF 函数内将MAX(score)
更改为 score
没有区别
删除该子查询后,它执行得很好......
【参考方案1】:
试试这个,即添加您在 GROUP BY 子句中选择的列名(player_id, player.name):
SELECT player_id, players.name,
COUNT( * ) AS matches,
SUM( score ) AS runs,
(SELECT IF(is_out = 0, CONCAT(MAX(score),'*'), MAX(score)) FROM batting WHERE score = MAX(score) ) AS high
FROM batting
RIGHT JOIN players ON batting.player_id = players.p_id
WHERE player_id <> 0
GROUP BY player_id, players.name, high
【讨论】:
mysql 对强制 GROUP BY 字段匹配非聚合输出列并不挑剔(与其他 DBMS 不同)。 @rahul 仍然没有变化 这不是真的@symcbean,dev.mysql.com/doc/refman/5.7/en/group-by-handling.html @Yottatron:谢谢 - 不知道这一点(很高兴获得权威参考),但我注意到这是强制执行的,并且查询违反了这些规则,它会返回类似 @987654323 的错误@【参考方案2】:SELECT IF(is_out = 0, CONCAT(MAX(score),'*'), MAX(score)) FROM batting WHERE score = MAX(score)
这没有任何意义(您不能在 WHERE 子句中使用聚合函数)。事实上,我很难想象你期望它做什么。 MySQL 可能也很困惑。
【讨论】:
我想选择包含最高分的行,检查该行上的 is_out 列是否等于 0,如果是,则在星号旁边返回最高分,否则不带星号返回 见***.com/questions/9028375/mysql-need-two-limits/…以上是关于MySQL 错误 #1111的主要内容,如果未能解决你的问题,请参考以下文章