我有一个简单的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命令或者我想念的简单东西。我只需要找到一种方法来根据位置合并两个表。
有人能指出我正确的方向吗?
答案 0 :(得分:3)
COUNT将返回非空值的数量,因此您需要一种方法将空字符串转换为空值以获得0。
SELECT location, COUNT(NULLIF(name,'')) AS count FROM table GROUP BY location;