对列的COUNT个进行SQL查询过滤

时间:2019-07-18 21:20:32

标签: sql sql-server

我需要根据查询中的记录数来过滤SQL查询。

我希望查询仅返回“位置”计数大于5的行。

例如,我们有100行数据。 10个“位置”构成了全部100行,但我只希望在COUNT("Location") > 5处的行,从根本上消除了在“ COUNT("Location") < 5位置处的行。

我已经尝试将汇总和HAVING子句组合使用,但是无法确定答案。

3 个答案:

答案 0 :(得分:2)

我认为您想要一个窗口函数:

select t.*
from (select t.*, count(*) over (partition by location) as cnt
      from t
     ) t
where cnt >= 5;

答案 1 :(得分:0)

戈登·利诺夫(Gordon Linoff)使用CTE的替代答案:

with CTE as(
select *, count(*) over (partition by Location) as count from table 
)

select *from CTE where count >= 5

答案 2 :(得分:0)

这是您使用HAVING子句可能追求的解决方案...

select t.*
from t
inner join
(
    select Location, count(*) as Count
    from t
    group by Location
    having count(*) >= 5
) as t2 on t.Location = t2.Location
order by t.ID

它在action中。