为什么不能在where子句中使用Count()运算符?我怎么绕过这个?

时间:2017-04-10 23:30:36

标签: sql sqlite

我正在尝试编写一个返回城镇的查询,以及来自每个城镇的参赛者数量,其中参赛者人数大于5人。

我的查询现在看起来像这样:

  从pra(故乡)> marathon2016选择故乡,伯爵(故乡)按计数(故乡)desc的家乡顺序的5组;

但sqlite3对此做出回应:

  

错误:滥用聚合:count()

我做错了什么,为什么我不能在这里使用count(),而应该使用什么呢。

2 个答案:

答案 0 :(得分:1)

当您尝试在WHERE原因中使用聚合函数(例如count)时,通常会查找HAVING而不是WHERE:

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

您不能在WHERE原因中使用聚合,因为聚合是跨多行计算的(由GROUP BY指定),但WHERE用于筛选单个行以确定将应用哪个行集GROUP BY(即WHERE)在分组之前发生,在分组后应用聚合)。

答案 1 :(得分:0)

尝试以下方法:

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