2015-12-23 36 views
1

我有一张玩家表现表,我想要为每个玩家返回高分,并在其后面添加一个星号('*'),如果他们在获得此分数时没有出局。这是到目前为止,我已经建立了查询,但它给了我错误#1111:无效使用组功能MySQL错误#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

+0

我怀疑错误涉及从击球 –

+0

选择MAX(分数)的子查询@Yottatron没有区别,如果我改变了'MAX(分数)'只是'score' IF函数 – user5697101

+0

内当该子查询删除它执行得很好... –

回答

1

发生试试这个即加列名(player_id,players.name),你是选择在GROUP BY子句:

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 
+0

不幸仍然显示相同的错误 – user5697101

+0

@MichealOMaolain:请检查编辑! –

+0

对于强制执行GROUP BY字段匹配非聚合输出列(与其他DBMS不同),MySQL并不挑剔。 – symcbean

1

SELECT IF(is_out = 0,CONCAT(MAX(得分), '*'),MAX(分数)) FROM击球WHERE得分= MAX(得分)

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

+0

我想选择包含最大分数的行,检查该行上的is_out列是否等于0,如果是,则将最大分数返回为星号,否则返回不带星号 – user5697101

+0

请参见http:// stackoverflow .COM /问题/ 9028375/MySQL的,需要两禁地/ 9032759#9032759 – symcbean