2

我有一个简单的 MySQL 数据库,其中包含以下字段:

mysql> SELECT * from table;
+----+-----------+------+
| id | location  | name | 
+----+-----------+------+
|  1 | NJ        | Gary |
|  2 | MN        | Paul |
|  3 | AZ        |      |
|  4 | MI        | Adam |
|  5 | NJ        |      |
|  6 | MN        | Dave |
+----+-----------+------+
6 rows in set (0.00 sec)

我需要检索每个州有多少人的列表,不包括那些没有名字的人。换句话说,我试图重现以下结果:

+----------+-------+
| location | count | 
+----------+-------+
| AZ       |     0 |
| MI       |     1 |
| MN       |     2 |
| NJ       |     1 |
+----------+-------+

我能够接近

SELECT location, COUNT(*) AS count FROM table WHERE name!='' GROUP BY location;

但是, COUNT(*) 不包括零计数。我尝试将 JOIN 与生成的表一起使用

SELECT DISTINCT location, null as count from table;

但是 LEFT JOIN 会从右表中抛出计数列,并且由于某种原因,RIGHT JOIN 似乎不包括零行或实际计数。

我觉得好像有一个 MySQL 命令或我缺少的一些简单的东西。我只需要找到一种方法来根据位置合并两个表。

谁能指出我正确的方向?

4

1 回答 1

3

COUNT 将返回非空值的数量,因此您需要一种将空字符串转换为空值以获得 0 的方法。

 SELECT location, COUNT(NULLIF(name,'')) AS count FROM table GROUP BY location;
于 2013-10-07T19:00:48.817 回答