我正在尝试编写一个返回城镇的查询,以及来自每个城镇的参赛者数量,其中参赛者人数大于5人。
我的查询现在看起来像这样:
从pra(故乡)> marathon2016选择故乡,伯爵(故乡)按计数(故乡)desc的家乡顺序的5组;
但sqlite3对此做出回应:
错误:滥用聚合:count()
我做错了什么,为什么我不能在这里使用count(),而应该使用什么呢。
答案 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;