таблица базы данных похожа на этот
============================
= suburb_id | value
= 1 | 2
= 1 | 3
= 2 | 4
= 3 | 5
запрос
SELECT COUNT(suburb_id) AS total, suburb_id
FROM suburbs
where suburb_id IN (1,2,3,4)
GROUP BY suburb_id
, однако, пока я выполняю этот запрос, он не дает COUNT (suburb_id) = 0, когда suburb_id = 0 потому что в таблице пригородов suburb_id 4 нет, я хочу, чтобы этот запрос возвращал 0 для suburb_id = 4, например
============================
= total | suburb_id
= 2 | 1
= 1 | 2
= 1 | 3
= 0 | 4
Это:
SELECT id, COUNT(suburb_id)
FROM (
SELECT 1 AS id
UNION ALL
SELECT 2 AS id
UNION ALL
SELECT 3 AS id
UNION ALL
SELECT 4 AS id
) ids
LEFT JOIN
suburbs s
ON s.suburb_id = ids.id
GROUP BY
id
или это:
SELECT id,
(
SELECT COUNT(*)
FROM suburb
WHERE suburb_id = id
)
FROM (
SELECT 1 AS id
UNION ALL
SELECT 2 AS id
UNION ALL
SELECT 3 AS id
UNION ALL
SELECT 4 AS id
) ids
В этой статье сравнивается производительность двух подходов:
, хотя это не имеет большого значения в вашем случае, поскольку вы запрашиваете только 4
записей.
GROUP BY требует строк для работы, поэтому, если у вас нет строк для определенной категории, вы не получите подсчет. Думайте о предложении where как об ограничении исходных строк, прежде чем они будут сгруппированы вместе. Предложение where не предоставляет список категорий для группировки.
Что вы можете сделать, так это написать запрос для выбора категорий (пригородов), а затем выполнить подсчет в подзапросе. (Я не уверен, на что похожа поддержка MySQL для этого)
Что-то вроде:
SELECT
s.suburb_id,
(select count(*) from suburb_data d where d.suburb_id = s.suburb_id) as total
FROM
suburb_table s
WHERE
s.suburb_id in (1,2,3,4)
(MSSQL, извинения)
Запрос:
select case
when total is null then 0
else total
end as total_with_zeroes,
suburb_id
from (SELECT COUNT(suburb_id) AS total, suburb_id
FROM suburbs
where suburb_id IN (1,2,3,4)
GROUP BY suburb_id) as dt