内部mysql case语句未在结果中显示时不匹配

我有一个mysql语句如下

SELECT CASE WHEN HOUR(created_at) BETWEEN 0 AND 11 THEN 'Morning' WHEN HOUR(created_at) BETWEEN 12 AND 15 THEN 'Afternoon' WHEN HOUR(created_at) BETWEEN 16 AND 18 THEN 'Evening' WHEN HOUR(created_at) BETWEEN 19 AND 24 THEN 'Night' END AS session, SUM(total) AS `total` FROM `orders` WHERE (purchase_date between '2014-05-01' and '2014-05-30') GROUP BY CASE WHEN HOUR(created_at) BETWEEN 0 AND 11 THEN 1 WHEN HOUR(created_at) BETWEEN 12 AND 16 THEN 2 WHEN HOUR(created_at) BETWEEN 17 AND 18 THEN 3 WHEN HOUR(created_at) BETWEEN 19 AND 24 THEN 4 END; 

我得到这样的输出

 +------------+------------+ | session | total | +------------+------------+ | Morning | 47083.21 | | Afternoon | 1124804.51 | | Evening | 165643.34 | | Night | 1690492.01 | +------------+------------+ 

但是当早上没有条目然后输出结果中缺少早晨行但我想要一个早晨但总共为0的行。请帮助我如何实现相同

 Expected output +------------+------------+ | session | total | +------------+------------+ | Morning | 0 | | Afternoon | 14804.51 | | Evening | 16643.34 | | Night | 19492.01 | +------------+------------+ 

实际输出没有早晨排

 Actual output +------------+------------+ | session | total | +------------+------------+ | Afternoon | 1124804.51 | | Evening | 165643.34 | | Night | 1690492.01 | +------------+------------+ 

如果有任何帮助或暗示来解决这个问题,我将不胜感激

添加create table cal (hours int not null) 。 填写0到23(没有24小时?)。 然后做

 SELECT CASE WHEN cal.hours BETWEEN 0 AND 11 THEN 'Morning' WHEN cal.hours BETWEEN 12 AND 15 THEN 'Afternoon' WHEN cal.hours BETWEEN 16 AND 18 THEN 'Evening' WHEN cal.hours BETWEEN 19 AND 24 THEN 'Night' END AS session ,sum(coalesce(total, 0)) from (select created_at, total from orders where purchase_date between '2014-05-01' and '2014-05-30') T1 right outer join cal on (cal.hours = hour(T1.created_at)) group by CASE WHEN cal.hours BETWEEN 0 AND 11 THEN 'Morning' WHEN cal.hours BETWEEN 12 AND 15 THEN 'Afternoon' WHEN cal.hours BETWEEN 16 AND 18 THEN 'Evening' WHEN cal.hours BETWEEN 19 AND 24 THEN 'Night' END;