where函数在sqlite中

use*_*241 1 sql database sqlite

基本上我到目前为止设法产生这个:

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

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

sqlite> SELECT city, COUNT(bname) AS sum FROM building WHERE sum>1 GROUP BY city;
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

Error: misuse of aggregate: COUNT()    
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么这不起作用,我会做什么呢?谢谢

Fil*_*lva 5

如果要基于聚合函数限制结果集,请使用HAVING子句而不是以下位置:

SELECT city,
  COUNT(bname) AS sum
FROM building
GROUP BY city
HAVING COUNT(bname) > 1;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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