为什么不能在where子句中使用Count()运算符?我如何解决这个问题?

问题描述:

我想编写一个查询返回小镇,并从每个小镇选手的数量大于5为什么不能在where子句中使用Count()运算符?我如何解决这个问题?

我的查询选手的数量现在看起来是这样的:

select hometown, count(hometown) from marathon2016 where count(hometown) > 5 group by hometown order by count(hometown) desc;

但sqlite3的这一回应:

Error: misuse of aggregate: count()

什么我做错了什么,为什么不能我使用COUNT()在这里,我就改用什么。

尝试以下操作:

select 
    hometown, 
    count(hometown) as hometown_count 
from 
    marathon2016 
group by 
    hometown 
having 
    hometown_count > 5 
order by 
    hometown_count desc; 
+0

那么,有没有办法只能获得其中只有5人以上的城镇中列出的结果? –

+0

@BryceEdwards我误解了你的问题。更新了我的答案。 –

当你试图在WHERE原因使用聚合函数(如count),你通常是寻找,而不是为HAVING WHERE:

select hometown, count(hometown) 
from marathon2016 
group by hometown 
having count(*) > 5 
order by count(*) desc 

你不能在WHERE原因使用聚合,因为聚集在多个行计算(由GROUP BY指定)但如果是用于过滤各行,以确定哪些行集GROUP BY将被应用到(即WHERE在分组之前发生并在分组后应用聚合)。

+0

真棒,谢谢!如果 –

+0

@BryceEdwards这个答案帮助你,你需要通过点击投票按钮下方的复选标记接受它。这样其他访问者可以很容易地看到你如何解决你的问题。谢谢! –