我需要根据查询中的记录数来过滤SQL查询。
我希望查询仅返回“位置”计数大于5的行。
例如,我们有100行数据。 10个“位置”构成了全部100行,但我只希望在COUNT("Location") > 5
处的行,从根本上消除了在“ COUNT("Location") < 5
位置处的行。
我已经尝试将汇总和HAVING
子句组合使用,但是无法确定答案。
答案 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中。