У меня есть простой БД 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 или что-то простое, что мне не хватает. Мне просто нужно найти способ слияния двух таблиц на основе местоположения.
Может ли кто-нибудь указать мне в правильном направлении?
Отлично! Спасибо! Я никогда бы не подумал подойти к этому так! Отметка вашего решения как ответа, но мне все же интересно узнать, как и как можно объединить две таблицы, которые я пытался (неудачно) присоединиться. – aswanson
Это, безусловно, было бы возможно, но это было бы очень сложной версией запроса в ответе, и вам нужно будет использовать 'NULLIF' в любом случае, чтобы не получить счет' 2' для 'NJ' – Mchl