Northwind数据库Employees表SQL查询问题:无法筛选含至少2名销售代表的城市并统计排序
解决Northwind Employees表销售代表城市筛选问题
嘿,我明白你遇到的麻烦了——想要找出至少有2名销售代表的城市,结果却把所有有销售代表的城市都列出来了,对吧?这其实是个很常见的SQL新手坑,问题出在分组后筛选的逻辑用错了子句。
问题根源
你大概率是用了WHERE子句来筛选聚合后的数量(比如WHERE COUNT(*) >=2),但WHERE是在分组之前过滤行数据的,这时候聚合结果还没生成,根本没法用它来筛选分组后的数量。我们需要的是在分组完成后,对聚合结果进行筛选,这时候得用HAVING子句。
正确的SQL代码
针对Northwind的Employees表,假设销售代表的职位字段是JobTitle(值为'Sales Representative'),正确的查询应该是这样:
SELECT City, COUNT(*) AS SalesRepCount FROM Employees -- 先筛选出所有销售代表,减少分组前的数据量 WHERE JobTitle = 'Sales Representative' -- 按城市分组,统计每个城市的销售代表数量 GROUP BY City -- 关键:分组后只保留数量≥2的城市 HAVING COUNT(*) >= 2 -- 按销售代表数量排序,DESC是降序,ASC是升序,可按需调整 ORDER BY SalesRepCount DESC;
代码逐行解释
WHERE JobTitle = 'Sales Representative':先把非销售代表的员工排除在外,只处理我们关心的群体,也能提升查询效率。GROUP BY City:按照城市对筛选后的员工进行分组,为后续统计做准备。HAVING COUNT(*) >= 2:这是解决你问题的核心!它会在分组完成后,只保留那些销售代表数量≥2的城市分组,完美实现你的需求。ORDER BY SalesRepCount DESC:最后按照每个城市的销售代表数量从多到少排序,方便查看结果。
如果你的职位字段名称或者值有差异,只需要调整WHERE子句里的条件就行啦~
内容的提问来源于stack exchange,提问作者Frank Martin
相关产品推荐
相关产品推荐

