没有结果匹配时加入表格

时间:2019-01-09 18:03:44

标签: mysql join

我为此努力了好几个小时,都没有成功。 我创建了一个包含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_table如下:

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

无论我从右加入到左加入做出了什么更改,我都只会从OutgoingCalls选择(没有加入的第一个)中获得小时数。

我希望在24小时之内获得全部服务,而在某些小时内没有结果。

1 个答案:

答案 0 :(得分:0)

您应该翻转外部联接。主表应为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