我想选择平均超时率低于 50% 的所有用户:
SELECT *
FROM user u
WHERE (SELECT Avg(gu.didtimeout)
FROM (SELECT didtimeout
FROM gameuser
WHERE userid = u.userid
LIMIT 50) gu) < 0.5;
但是,我收到了这个错误:
ERROR 1054 (42S22): Unknown column 'u.userID' in 'where clause'
我如何在合法的 MySQL 中进行此查询?
编辑 1:
以下是GameUser
和User
模式的相关部分。
CREATE TABLE `User` (
`userID` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`userID`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=latin1;
CREATE TABLE `GameUser` (
`gameID` mediumint(8) unsigned NOT NULL,
`userID` mediumint(8) unsigned NOT NULL,
`didTimeout` tinyint(1) unsigned NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
编辑 2:
使用 MySQL 5.7.11。
最佳答案
要获取用户 ID,请执行以下操作:
SELECT gu.userid
FROM gameuser gu
GROUP BY gu.userid
HAVING AVG(gu.didtimeout) < 0.5;
如果需要,您可以加入额外的用户信息。
关于mysql - 使用外部信息的 WHERE 子句中的 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40198169/