没有结果匹配时的连接表

ax6ht2ek  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(303)

我挣扎了好几个小时都没有成功。我创建了一个包含24小时的表,名为hours\u table,其中hours列为00->23,result列全部为0。我有一个带有calls duration的表,我试图将一天中每个时间的calls duration之和分组。

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

不管我从右到左的连接做了什么改变,我只得到outgoingcalls select(第一个没有连接的连接)中的小时数。
我希望得到所有24小时的结果时,从传出的电话没有结果,在某些小时。

owfi6suc

owfi6suc1#

你应该翻转外部连接。主表应该是 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

相关问题