对于这个问题,网上找了很多示例,绝大部分都是 依赖于创建的时间表然后进行外连接解决
废话不多说,上demo
1.数据库中选择任意一个有数据的表,例如我选择的是 ak_customer表
```
SELECT @cdate := DATE_ADD( @cdate, INTERVAL - 1 DAY ) date, 0 AS day_count
FROM ( SELECT @cdate := DATE_ADD( CURDATE( ), INTERVAL - 10 DAY ) FROM ak_customer ) t1 WHERE @cdate > '2021-06-03'
```
查询结果如下:
2.将自己要统计的数据,按我们自己的要求写出来,当然此时,肯定显示的都是有数据的记录统计结果:
```
select DATE_FORMAT( create_time, '%Y-%m-%d' ) AS date ,COUNT(*) as day_count
from ak_customer group by date
```
查询结果如下:
3.联合查询将没有记录的时间补0
```
select date,Max(day_count) day_count from (
SELECT
@cdate := DATE_ADD( @cdate, INTERVAL - 1 DAY ) date,
0 AS day_count
FROM
( SELECT @cdate := DATE_ADD( CURDATE( ), INTERVAL - 10 DAY ) FROM ak_customer ) t1
WHERE
@cdate > '2021-06-03' union
select * from (
select DATE_FORMAT( create_time, '%Y-%m-%d' ) AS date ,COUNT(*) as day_count
from ak_customer group by date
)t2
) a GROUP BY date ASC
```
查询结果如下:
总结:当然还有别的方法,不过这个方法不用创建任何的存储过程,是相对来说简单一点的