首页 > 解决方案 > 在聚合函数中指定列值与使用 WHERE 子句

问题描述

我有一个people看起来像这样的数据库:

我想计算state='CA'.

我的第一次尝试是:

SELECT COUNT(state='CA')
FROM people 
;

这返回了 1 行,值为 1000。所以我认为数据库中有来自 CA 的 1000 人。

事实证明这是不正确的。我知道它们是 127,我可以通过查询来验证

SELECT COUNT(*)
FROM people 
WHERE state='CA'
;

它返回 1 行,值为 127。

我了解第二个查询的工作原理。但是,我不明白第一个有什么问题。它在返回什么?

标签: sql

解决方案


如果您想查看发生了什么,请运行以下查询:

select state='CA' from people;

您将看到 people 中的每一行都会得到一个结果,值为 0 或 1(或 True/False)。您选择的是每行是否 state='CA',并且这些结果的数量与行数一样多。

您不能在语句中限制 COUNT 语句,您必须像第二个示例中那样通过 WHERE 子句来执行此操作。


推荐阅读