1

基本上到目前为止,我已经设法制作了这个:

sqlite> SELECT city, COUNT(bname) AS sum FROM building GROUP BY city;
city        sum       
----------  ----------
Leeds       3         
London      1         
New York    2         
Paris       1  

但是我想做的只是打印总和> 1的城市。我试过这个:

sqlite> SELECT city, COUNT(bname) AS sum FROM building WHERE sum>1 GROUP BY city;

但我得到了错误:

Error: misuse of aggregate: COUNT()    

有人可以解释为什么这不起作用,而是我应该做什么?谢谢

4

2 回答 2

5

当您想根据聚合函数限制结果集时,请使用 HAVING 子句而不是 where:

SELECT city,
  COUNT(bname) AS sum
FROM building
GROUP BY city
HAVING COUNT(bname) > 1;

关于为什么你不能使用 WHERE,stackoverflow 上有很好的解释,但这里有一个简短的解释:

以下是执行 SELECT 时发生的情况:

  1. 在哪里
  2. 通过...分组
  3. 拥有
  4. 选择
  5. ORDER BY(此列表在某些 RDBMS 中可能更大,但这应该会给您一个想法)

因为您正在执行 GROUP BY 来获取您的 COUNT,所以您不能在 WHERE 子句中限制它,因为它已经发生了。

于 2013-11-13T19:00:37.900 回答
0

根据聚合函数的结果进行过滤时需要使用 have

SELECT city, COUNT(bname) AS sum 
FROM building 
GROUP BY city
HAVING COUNT(bname) > 1;
于 2013-11-13T19:01:44.780 回答