Mysql count возвращает ноль, если запись не найдена - PullRequest
13 голосов
/ 07 октября 2009

У меня есть две таблицы.

cities - id_city, city_name
properties - id_property, id_city, property_name

Я хочу отобразить cities.city_name и рядом с ним [properties.count(id_city)]

Как мне сделать запрос, который по-прежнему возвращает ноль, если записи не найдены вместо NULL, чтобы я получал результаты, подобные этому:

London [123]
New York [0]
Berlin [11]

где "Нью-Йорк" это [0], а не NULL и не 1?

Ответы [ 4 ]

20 голосов
/ 07 октября 2009

Я думаю, что следующее сделает это для вас, хотя я не проверял это. Хитрость заключается в том, чтобы получить количество свойств в одной таблице, а затем соединить эту таблицу влево с таблицей городов, преобразовав NULL в 0 с помощью функции IFNULL .

SELECT city_name, IFNULL(property_count, 0)
FROM cities
LEFT JOIN
   (SELECT id_city, count(*) as property_count
    FROM properties
    GROUP BY id_city) city_properties
   USING (id_city);
20 голосов
/ 07 октября 2009

Использовать внешнее соединение:

select cities.city_name, count(properties.id_city)
  from cities left join properties on cities.id_city = properties.id_city
  group by 1
1 голос
/ 07 октября 2009

Запрос:

SELECT cities.*, COUNT(properties.id_city) as num
FROM cities
LEFT JOIN properties on cities.id_city=properties.id_city
GROUP BY cities.id_city

должен возвращать счетчик 0 там, где вы хотите, хотя я не уверен на 100%, что это работает в MySQL.

0 голосов
/ 09 февраля 2017

Simple. Используйте «(Count (*) + 0)». Любой ноль плюс 0 вернет число.

...