sql - sqlite中的Where函数

标签 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  

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

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

但是我得到了错误:

Error: misuse of aggregate: COUNT()    

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

最佳答案

当您想根据聚合函数限制结果集时,您可以使用 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. 选择
  6. 订购方式 (此列表在某些 RDBMS 中可能更大,但这应该会给您一个想法)

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

关于sql - sqlite中的Where函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19962090/

相关文章:

database - 我可以先使用实体​​框架代码为单个集合属性创建单独的表吗?

android - SQLite异常: No such table found whereas a table was created

linux - 在 Linux 中,是否有将 CSV 文件转换为 SQLite 文件的命令?

sql - 检索层次结构的上升行

MySQL轮询,结果错误

database - CouchDB 与 RDBMS 相比有什么优势

php - MySQL PHP 插入和更新

sql - 为什么当您使用 'IS' 而不是 '=' 时 SQLite 不使用索引?

mysql - 如何优化我在 Mysql 中连接两个表的查询

php - 当 SUM 用于特定条件时,如何避免在 FOREACH block 中进行 MySQL 查询?