我希望在没有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 |
+-----------------------+
我认为最好逐个选择日期时间。
答案 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