在如下的查询中:
SELECT a, count(b)
FROM table
where condition = …
GROUP by a
having count(b) > 10
唯一的方法是只获取返回的行,将其包装在外部SELECT COUNT FROM(... query ..)中?
答案 0 :(得分:1)
由于您需要两个聚合,一个基于另一个聚合,是的,您需要这两个步骤。
select count(*)
from
(
select a
from table
where condition = ...
group by a
having count(b) > 10
) found;
但是,您的DBMS可能会提供快捷方式。例如,Oracle允许这样做:
select count(count(b))
from table
where condition = ...
group by a
having count(b) > 10;
但这不再是标准的SQL(据我所知),因此对于那些不熟悉这种语法的人来说,查询的可读性较差。
答案 1 :(得分:0)
您没有提到您使用的是哪个数据库,但许多数据库提供了分析功能,只需尝试以下操作:
SELECT a, count(b), COUNT(*) OVER ()
FROM table
where condition = …
GROUP by a
having count(b) > 10