mysql - 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
' 将生成两列,而不是两行。虽然我仍然不知道确切的原因。
希望有人可以帮助我!太感谢了!
解决方案
你很亲密。但NOT IN
确实是这样工作的——因为子查询返回多个列。而且您只比较一个值。相反,使用两个单独的比较:
SELECT activity
FROM a
WHERE n <> (SELECT MAX(n) FROM a) AND
n <> (SELECT MIN(n) FROM a) ;
推荐阅读
- c# - 破坏随机字符串
- java - 如何在 Android 上的 /0 处创建目录?
- awk - 如何删除文件夹中多个文件的“0”行?
- android - Android Chip_如何以编程方式使芯片背景颜色透明?
- r - 具有 Kolmogorov-Smirnov 双样本、Cramer-von Mises 和 Kuiper 检验的 ECDF
- c++ - C++ 标识符“读取”冲突?
- python - Pandas 已安装但无法识别
- android - 在华为应用程序库中使用一个 Signal Cordova Plugin SDK 支持 Android 应用程序
- c++ - 从 HANDLE 到 ULONG C++ 的类型转换截断
- angular - 单击按钮更改路由 url