获取/拥有组的行数

时间:2015-08-28 12:03:18

标签: sql

在如下的查询中:

SELECT a, count(b)
FROM table
where condition = …
GROUP by a
having count(b) > 10  

唯一的方法是只获取返回的行,将其包装在外部SELECT COUNT FROM(... query ..)中?

2 个答案:

答案 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