Mysql无效使用带Count的组函数?
Posted
技术标签:
【中文标题】Mysql无效使用带Count的组函数?【英文标题】:Mysql invalid use of group function with Count? 【发布时间】:2014-03-29 00:27:02 【问题描述】:我正在构建一个游戏,我目前正在研究匹配玩家机制,但我遇到了这个我无法理解的错误。我有 2 个表 games
保存有关游戏不同实例的信息,players
保存每个游戏中的玩家。现在,当新玩家加入匹配队列时,我想选择所有当前尚未开始的游戏并将它们(玩家)添加到相应的游戏中。我如何识别未开始的游戏是根据其中的玩家数量。如果一个游戏是为 2 名玩家设计的,那么任何有 1 名玩家的游戏都还没有开始。这是我的查询
SELECT * // * for saving time in testing
FROM games d LEFT JOIN players dp ON d.id = dp.gameId
WHERE d.players > COUNT(dp.playerId) LIMIT 1
但我得到了这个烦人的错误
1111 - 组函数使用无效
我试过这样
SELECT *, COUNT(dp.playerId) AS cPlayers
FROM games d LEFT JOIN players dp ON d.id = dp.gameId
WHERE d.players > cPlayers LIMIT 1
然后我明白了
1054 - 'where 子句'中的未知列 'cPlayers'
【问题讨论】:
为什么坚持恢复格式编辑? 【参考方案1】:我想这应该可行。
SELECT *
FROM games d LEFT JOIN players dp ON d.id = dp.gameId
GROUP BY d.id
HAVING d.players > COUNT(dp.playerId) LIMIT 1
【讨论】:
GROUP BY
应该在d.id
上执行
@zerkms 好点。消除了我对它为什么不使用我的索引的疑虑!
@zerkms 谢谢,没注意,更新了答案【参考方案2】:
您应该在字段上使用 GROUP BY 以使用 COUNT(dp.playerId) 等聚合函数。
试试这个
SELECT COUNT(dp.playerId) AS cPlayers
FROM games d LEFT JOIN players dp ON d.id = dp.gameId group by dp.playerId
WHERE d.players > cPlayers LIMIT 1
【讨论】:
GROUP BY
go after WHERE
PS:由于在 where 中使用了cPlayers
,它不会运行
如果条件放在HAVING子句中会起作用吗?喜欢:拥有 d.players > cPlayers
那么它会起作用,但你仍然有错误的group by
& where
顺序以上是关于Mysql无效使用带Count的组函数?的主要内容,如果未能解决你的问题,请参考以下文章