Показать идентификатор, даже если результат пуст? - PullRequest
1 голос
/ 06 июля 2019

У меня есть команда SQL:

SELECT 
vinculo.id,
data start, 
count(*) title 
from 
atendimento_regulacao 
join vinculo on vinculo.id = atendimento_regulacao.vinculo_id 
where data = '2019-07-02' 
group by vinculo.usuario_id, atendimento_regulacao.data

Результат пуст, потому что не существует ни одной записи на where data = '2019-07-02'

Как показать id как показано ниже?

id | start | title
 1 |       |

Ответы [ 2 ]

1 голос
/ 06 июля 2019

Используйте RIGHT JOIN и конвертируйте count в приведенное ниже значение, в противном случае оно будет отображаться равным нулю, когда не найдется ничего подсчитать.

SELECT v.id, a.data start, 
       case when count(*) is null then null end title 
  FROM atendimento_regulacao a
 RIGHT JOIN vinculo v 
    ON v.id = a.vinculo_id 
   AND a.data = '2019-07-02'  
 GROUP BY v.usuario_id, a.data;

Демо

1 голос
/ 06 июля 2019

Вы можете использовать CROSS JOIN для генерации строк и LEFT JOIN для получения результатов:

select v.id, d.dte as start, count(ar.vinculo_id) as num_title 
from (select '2019-07-02' as dte) d cross join
     vinculo v left join
     atendimento_regulacao ar
     on v.id = ar.vinculo_id and ar.data = d.dte 
group by v.id, d.dte;

Если вы действительно хотите агрегировать по v.usuario_id, включите его как в select, так и в group by.

Примечания:

  • Структура запроса легко распространяется на несколько дат.
  • GROUP BY использует те же столбцы в SELECT.
  • Псевдонимы таблиц облегчают написание и чтение запроса.
  • Квалифицировать все ссылки на столбцы в запросе, который имеет более одной ссылки на таблицу.
  • В COUNT() используется столбец из ar, поэтому он может вернуть 0.

Для конкретного случая отдельной даты вы можете использовать условное агрегирование:

select v.id, '2019-07-02' as start,
       count(ar.vinculo_id) as num_title 
from vinculo v left join
     atendimento_regulacao ar
     on v.id = ar.vinculo_id and ar.data = '2019-07-02'
group by v.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...