Sql 为什么不能在where子句中使用Count()运算符?我该怎么做?

Sql 为什么不能在where子句中使用Count()运算符?我该怎么做?,sql,sqlite,Sql,Sqlite,我正试图编写一个查询来返回该城镇,以及来自跑步人数大于5的每个城镇的跑步人数 我现在的查询如下所示: 选择家乡,从2016年马拉松比赛中计数(家乡),其中计数(家乡)>5组按家乡顺序计数(家乡)描述 但是sqlite3的响应是: 错误:滥用聚合:计数() 我做错了什么,为什么我不能在这里使用count(),我应该使用什么来代替。尝试以下方法: select hometown, count(hometown) as hometown_count from marathon

我正试图编写一个查询来返回该城镇,以及来自跑步人数大于5的每个城镇的跑步人数

我现在的查询如下所示:

选择家乡,从2016年马拉松比赛中计数(家乡),其中计数(家乡)>5组按家乡顺序计数(家乡)描述

但是sqlite3的响应是:

错误:滥用聚合:计数()

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

尝试以下方法:

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

当您试图在WHERE原因中使用聚合函数(如
count
)时,通常会查找以下内容,而不是WHERE:

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

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

那么,只有5人以上的城镇才能得到结果吗?@布莱斯·爱德华兹我误解了你的问题。更新了我的答案。@BryceEdwards如果这个答案对你有帮助,你需要点击投票按钮下面的复选标记来接受它。这样其他访问者就可以很容易地看到您是如何解决问题的。谢谢