【问题标题】:MySQL Error #1111MySQL 错误 #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 没有区别
  • 删除该子查询后,它执行得很好......

标签: mysql mysql-error-1111


【解决方案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 仍然没有变化
  • @Yottatron:谢谢 - 不知道这一点(很高兴获得权威参考),但我注意到这是强制执行的,并且查询违反了这些规则,它会返回类似 @987654323 的错误@
【解决方案2】:

SELECT IF(is_out = 0, CONCAT(MAX(score),'*'), MAX(score)) FROM batting WHERE score = MAX(score)

这没有任何意义(您不能在 WHERE 子句中使用聚合函数)。事实上,我很难想象你期望它做什么。 MySQL 可能也很困惑。

【讨论】:

猜你喜欢
  • 2021-11-21
  • 2021-11-03
  • 2023-03-07
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 2017-08-17
  • 2016-12-11
  • 1970-01-01
相关资源
最近更新 更多