到目前为止,基本上我已经成功地制作了这个:
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 时发生的情况:
- 来自
- 在哪里
- 分组依据
- 拥有
- 选择
- 订购方式 (此列表在某些 RDBMS 中可能更大,但这应该会给您一个想法)
因为您正在执行 GROUP BY 来获得您的 COUNT,所以您不能在 WHERE 子句上限制它,因为它已经发生了。
关于sql - sqlite中的Where函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19962090/