首页 > 解决方案 > MySQL:错误:操作数应包含 1 列。我使用 WHERE...NOT IN(SELECT...) 有什么问题?

问题描述

信用:Leetcode_1355。活动参与者

问题:编写一个 SQL 查询来查找所有活动的名称,既没有最大参与人数也没有最小参与人数。

以任意顺序返回结果表。表“活动”中的每个活动都由“朋友”表中的任何人执行。

Friends table:
+------+--------------+---------------+
| id   | name         | activity      |
+------+--------------+---------------+
| 1    | Jonathan D.  | Eating        |
| 2    | Jade W.      | Singing       |
| 3    | Victor J.    | Singing       |
| 4    | Elvis Q.     | Eating        |
| 5    | Daniel A.    | Eating        |
| 6    | Bob B.       | Horse Riding  |
+------+--------------+---------------+

Activities table:
+------+--------------+
| id   | name         |
+------+--------------+
| 1    | Eating       |
| 2    | Singing      |
| 3    | Horse Riding |
+------+--------------+

Result table:
+--------------+
| activity     |
+--------------+
| Singing      |
+--------------+

我的代码如下:

WITH a AS(
    SELECT activity, COUNT(1) AS n 
    FROM Friends
    GROUP BY activity
    )

SELECT activity
FROM a
WHERE n NOT IN (SELECT MAX(n),MIN(n) FROM a)

我已经看到使用 n != (select min(n) from a) 和 n != (select max(n) from a) 的成功,但我不知道为什么我的代码出错了。我的猜测是,这是因为 ' SELECT MAX(n), MIN(n) FROM a' 将生成两列,而不是两行。虽然我仍然不知道确切的原因。

希望有人可以帮助我!太感谢了!

标签: mysqlsqlwhere-clause

解决方案


你很亲密。但NOT IN确实是这样工作的——因为子查询返回多个列。而且您只比较一个值。相反,使用两个单独的比较:

SELECT activity
FROM a
WHERE n <> (SELECT MAX(n) FROM a) AND
      n <> (SELECT MIN(n) FROM a) ;
  

推荐阅读