mysql - 使用外部信息的 WHERE 子句中的 SELECT

标签 mysql sql database

我想选择平均超时率低于 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:

以下是GameUserUser 模式的相关部分。

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/

相关文章:

php - 如果一个变量等于一个字母或单词

SQL Server 服务代理

mysql - 需要 SQL 专家来处理复杂的查询

mysql - 在性能开始下降之前 MySQL 数据库可以有多大

MySQL:通过在html页面上获取TABLE_NAME olny(无列信息)来显示表中所有数据的最简单方法

c# - Linq2db.MySQL C# 中 DateTime 的 GroupBy 日期部分

带有内部连接的 2 个表的 mysql 查询

sql - 了解 MDX 'ALL' 吗?

java hibernate : selecting the discriminator column in polymorphic hql query

sql - 用于时区转换的mysql查询