我正在编写一个返回COUNT的select子查询。但是,我需要在子查询中使用HAVING子句,因此需要在子查询SELECT中指定该列。结果是我有2列:COUNT和column_for_having_clause。
有什么方法可以告诉SQL只采取第一列。我收到一个错误说 “操作数应包含1列”。我认为这一定是一个常见的问题,是否有人知道解决方法?
另外,有没有办法在不指定SELECT查询中的列的情况下执行HAVING子句?
谢谢!
答案 0 :(得分:1)
你可以做到
SELECT blah FROM foo WHERE bar = (SELECT cnt FROM (SELECT cnt, column_for_having_clause FROM table .... HAVING ... LIMIT 1))
但是很难看。
答案 1 :(得分: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);