如果此查询没有结果,则计数(*)返回0

时间:2014-05-30 09:33:53

标签: mysql sql

我希望在没有DB结果的情况下为此查询获取0。如果在任何时候没有这样的预订,则返回0

SELECT datetime, COUNT(id) bookings
FROM booking 
WHERE datetime LIKE '2014-05-20%' 
OR datetime LIKE '2014-05-21%' 
OR datetime LIKE '2014-05-24%' 
GROUP BY datetime

我尝试了这个,但没有,结果相同:

SELECT datetime, IFNULL(COUNT(id), 0) bookings 
FROM booking 
WHERE datetime LIKE '2014-05-20%' 
OR datetime LIKE '2014-05-21%' 
OR datetime LIKE '2014-05-24%' 
GROUP BY datetime

我尝试了IFNULL()和COALESCE(),但仍然得到了相同的结果。请帮助解决此问题。

我想要的结果:

+-----------------------+
| datetime  || bookings |
+-----------------------+
|2014-05-20 ||    5     |
|2014-05-21 ||    4     |
|2014-05-24 ||    0     |
+-----------------------+

我认为最好逐个选择日期时间。

1 个答案:

答案 0 :(得分:1)

如果您在过滤的日期之一上没有数据,那么无论COUNT如何,都不会有关于该数据的行,为了避免这种情况,可以创建临时表。您希望过滤的日期和OUTER JOIN到数据表的日期,例如

SELECT dt.DateTime, Count(b.id) bookings
FROM   (SELECT cast('20140520' as datetime) datetime
        UNION ALL
        SELECT cast('20140521' as datetime) 
        UNION ALL
        SELECT cast('20140524' as datetime) ) dt 
       LEFT  JOIN booking b ON dt.datetime = b.datetime
GROUP BY dt.DateTime

SQLFiddle demo