2

我正在编写一个返回 COUNT 的选择子查询。但是,我需要在子查询中使用 HAVING 子句,因此需要在我的子查询 SELECT 中指定该列。所以结果是我有 2 列:COUNT 和 column_for_have_clause。

有什么方法可以告诉 SQL 只取第一列。我收到一条错误消息,提示“操作数应包含 1 列”。我想这一定是一个普遍的问题,有人知道解决方法吗?

另外,有没有一种方法可以在不指定 SELECT 查询中的列的情况下执行 HAVING 子句?

谢谢!

4

2 回答 2

1

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);
于 2009-08-29T14:44:56.007 回答
1

你可以做

SELECT blah FROM foo WHERE bar = (SELECT cnt FROM (SELECT cnt, column_for_having_clause FROM table .... HAVING ... LIMIT 1))

然而相当丑陋。

于 2009-08-29T14:40:37.103 回答