Отображение 0, когда count(*) равно нулю для предложения group by

#sql #count

#sql #количество

Вопрос:

Я пытаюсь написать SQL-запрос, который может отображать значение как 0, если для указанного условия нет строк

До сих пор я пробовал следующее, но, похоже, ничего не работает

  1. coalesce(count(m.a),'0')
  2. isnull(count(m.a),'0')
  3. 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 . , , Это совершенно неясно из вашего вопроса, в котором не упоминаются конкретные значения, которые должны быть в результирующем наборе.