Присоединиться к таблице, если результат не соответствует - PullRequest
0 голосов
/ 09 января 2019

Я борюсь с этим часами, но безуспешно. Я создал таблицу, содержащую 24 часа с именем hours_table, со столбцом часов с 00-> 23 и результатом столбца все 0. У меня есть таблица с продолжительностью звонков, по которой я пытаюсь сгруппировать сумму продолжительности звонков по времени суток.

SELECT  date_format(date, '%H' ) as todayhours ,truncate(sum(duration),2) 
as result FROM OutgoingCalls a 
where date > CURDATE() group by date_format(date, '%H' )

Этот устав обеспечивает:

Todayhours , result
00         ,  6
02         ,  5
04         ,  1
05         ,  2
06         ,  10
07         ,  10
08         , 162 `

Я хочу получить пропущенные часы с 0, как:

Todayhours , result
00         ,  6
01         ,  0
02         ,  5
03         ,  0
04         ,  1
05         ,  2
06         ,  10
07         ,  10
08         , 162 

Таблица часов выглядит так:

hours       result
00          0
01          0
02          0
...
23          0

У меня есть этот SQL:

SELECT  date_format(date, '%H' ) as todayhours ,truncate(sum(duration),2) 
as result FROM OutgoingCalls a
LEFT JOIN hours_table h ON h.hours = date_format(date, '%H' )
where date > CURDATE() group by h.hours

Независимо от того, какие изменения я внес в объединение справа налево, я получаю только те часы, которые были найдены в исходящих вызовах (первое без объединения).

Я хочу получить все 24 часа, когда результат исходящих звонков не даст результата в определенный час.

1 Ответ

0 голосов
/ 09 января 2019

Вы должны перевернуть внешнее соединение. Основная таблица должна быть hours_table вместо OutgoingCalls, как в:

SELECT
  h.hours,
  date_format(date, '%H' ) as todayhours,
  truncate(sum(duration),2) as result
FROM hours_table h
LEFT JOIN OutgoingCalls a ON h.hours = date_format(date, '%H' )
WHERE date > CURDATE()
GROUP BY h.hours
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...