我正在编写一个返回 COUNT 的选择子查询。但是,我需要在子查询中使用 HAVING 子句,因此需要在我的子查询 SELECT 中指定该列。所以结果是我有 2 列:COUNT 和 column_for_have_clause。
有什么方法可以告诉 SQL 只取第一列。我收到一条错误消息,提示“操作数应包含 1 列”。我想这一定是一个普遍的问题,有人知道解决方法吗?
另外,有没有一种方法可以在不指定 SELECT 查询中的列的情况下执行 HAVING 子句?
谢谢!
HAVING
当然,您几乎可以在子句中指定您想要的任何表达式。它不必是选择列表中的一列。
SELECT ...
FROM foo
WHERE x = (SELECT COUNT(*) FROM bar
GROUP BY y HAVING y = MAX(y));
但是,如果您将计数与外部查询中的某些内容进行比较,您也可以比较元组。
SELECT ...
FROM foo
WHERE (x, 1) = (SELECT COUNT(*), y = MAX(y) AS is_max FROM bar
GROUP BY y HAVING is_max = 1);
你可以做
SELECT blah FROM foo WHERE bar = (SELECT cnt FROM (SELECT cnt, column_for_having_clause FROM table .... HAVING ... LIMIT 1))
然而相当丑陋。