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的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误 #1111 - 组函数的使用无效

MySQL,混淆 w/查询/错误代码:1111。组函数的使用无效。

MySQL:无法创建表(错误号:150)

遇到 SQL 错误 1111 的问题

MySql Sql MAX 和 SUM 错误

错误代码1111。无效使用组功能