如何显示不同值的计数并包括零?

时间:2013-10-07 18:53:21

标签: mysql join merge count zero

我有一个简单的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会从右表中抛出count列,并且由于某种原因,RIGHT JOIN似乎不包括零行或实际计数。

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

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:3)

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

 SELECT location, COUNT(NULLIF(name,'')) AS count FROM table GROUP BY location;