#sql #count
#sql #количество
Вопрос:
Я пытаюсь написать SQL-запрос, который может отображать значение как 0, если для указанного условия нет строк
До сих пор я пробовал следующее, но, похоже, ничего не работает
coalesce(count(m.a),'0')
isnull(count(m.a),'0')
case when count(*) > 0 then count(*) else '0' end
select M.a, m.b, m.c, m.d, m.e,
--coalesce(count(m.a),'0') as CountOfRecords
--isnull(count(m.a),'0') as CountOfRecords
--case when count(*) > 0 then count(*) else '0' end
from my_table M
left join
(select a, b,c,d,e
from my_table
group by a, b,c,d,e
having count(*) >1 ) B
on M.b = B.b
and M.c = B.c
and M.d = B.d
and M.e = B.e
and m.a <> B.a
where M.a in (1,2)
and M.date<= '1/1/2019'
group by M.a, m.b, m.c, m.d, m.e
Ожидаемый результат
A B C D E count
1 1 1 1 1 10
2 2 2 2 2 0
Фактический результат
A B C D E count
1 1 1 1 1 10
Комментарии:
1. Не могли бы вы добавить сюда минимальное количество строк примеров
my_table
, чтобы проиллюстрировать проблему?
Ответ №1:
Вам нужно использовать вложенный запрос:
select coalesce(nb, 0) from (
select count(*) nb from my_table
group by my_table.a
) nested;
Ответ №2:
Вы ищете что-то подобное?
select a, b, c, d, e,
sum(case when M.date <= '2019-01-01' then 1 else 0 end) as cnt
from my_table
where a in (1, 2)
group by a, b, c, d, e;
При этом сохраняются все строки в исходных данных, которые соответствуют условию on a
, но не обязательно условие на дату. Затем подсчитываются только строки, соответствующие дате.
Комментарии:
1. Спасибо! Но я хочу — если для определенных значений a,b,c,d,e и m.date <=’01/01/2019′ в таблице нет строк, тогда отображается 0. Ценю вашу помощь!
2. @TigSh . , , Это совершенно неясно из вашего вопроса, в котором не упоминаются конкретные значения, которые должны быть в результирующем наборе.