2013-10-07 61 views
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(*)不包括零個計數親近。我試圖使用與

SELECT DISTINCT location, null as count from table; 

產生的表,但一個LEFT JOIN拋出右表計列JOIN一起,右似乎JOIN不包括零行或實際計數一些原因。

我覺得好像有一個MySQL命令或簡單的東西,我錯過了。我只需要找到一種方法來合併基於位置的兩個表。

任何人都可以指向正確的方向嗎?

回答

3

COUNT將返回非空值的數量,所以您需要一種方法將空字符串轉換爲空值以獲得0。

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

完美!謝謝!我從來沒有想過要這樣做!將您的解決方案標記爲答案,但我仍然好奇是否可以合併我嘗試(未成功)加入的兩個表。 – aswanson

+0

它肯定會是可能的,但它只是答案中查詢的高度複雜版本,無論如何你都需要使用'NULLIF',以免爲'NJ'計數'2' – Mchl