MySQL统计时间段数据,没有该天数据则为0

SELECT
COUNT(1) dealOrder,
o.create_date createDate
FROM orders o
WHERE o.shop_id = 27
AND DATE_FORMAT(o.create_date, '%Y-%m-%d') IN ('2018-04-19', '2018-04-18', '2018-04-17', '2018-04-16', '2018-04-15', '2018-04-14', '2018-04-13')
AND o.order_status IN ('1', '2', '3', '5')
GROUP BY DATE_FORMAT(o.create_date, '%Y-%m-%d');

图片说明

缺少14号和13号的数据

参考:https://blog.csdn.net/ajian759447583/article/details/61421399


(select '2018-04-19' as t
union select '2018-04-18' as t
union select '2018-04-17' as t
union select '2018-04-16' as t
union select '2018-04-15' as t
union select '2018-04-14' as t
union select '2018-04-13' as t)as temp
查询结果作为临时表,然后left join orders o

不建议用sql实现,在后台代码中操作会比较好