2013-10-07 1 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 (*) исключает нулевые отсчеты. Я пытался использовать JOIN вместе с таблицей производимого

SELECT DISTINCT location, null as count from table; 

, но LEFT JOIN выбрасывает столбец счета из таблицы справа, и по правому краю, кажется, не включает в себя нулевые строки или фактические счетчик для некоторая причина.

Мне кажется, что есть команда MySQL или что-то простое, что мне не хватает. Мне просто нужно найти способ слияния двух таблиц на основе местоположения.

Может ли кто-нибудь указать мне в правильном направлении?

ответ

3

COUNT вернет число ненулевых значений, поэтому вам понадобится способ преобразования пустых строк в значения null для получения 0s.

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

Отлично! Спасибо! Я никогда бы не подумал подойти к этому так! Отметка вашего решения как ответа, но мне все же интересно узнать, как и как можно объединить две таблицы, которые я пытался (неудачно) присоединиться. – aswanson

+0

Это, безусловно, было бы возможно, но это было бы очень сложной версией запроса в ответе, и вам нужно будет использовать 'NULLIF' в любом случае, чтобы не получить счет' 2' для 'NJ' – Mchl

Смежные вопросы