首页 > 解决方案 > 如何按日期分组(如果为空则选择 0)MYSQL

问题描述

即使数据不存在,我如何获取按日期范围内的每一天分组的计数数据,即 IF 0 将选择 0

这是我的示例数据和查询MYSQL FIDDLE

输入

create table t_order(
  order_id int
  ,qty int
  ,time datetime 
);

insert into t_order values (1,2,'2020-02-17 08:00:00.000');
insert into t_order values (2,1,'2020-02-18 10:00:00.000');
insert into t_order values (3,3,'2020-02-20 08:00:00.000');
insert into t_order values (4,1,'2020-02-20 10:00:00.000');
insert into t_order values (5,7,'2020-02-21 08:00:00.000');
insert into t_order values (6,1,'2020-02-23 10:00:00.000');
insert into t_order values (7,1,'2020-02-24 08:00:00.000');
insert into t_order values (8,2,'2020-02-24 10:00:00.000');
insert into t_order values (9,1,'2020-02-25 08:00:00.000');
insert into t_order values (10,1,'2020-02-26 10:00:00.000');

执行

SELECT
  SUM(qty) as total,
  DATE(time) as date
FROM t_order
where 
  DATE(TIME) between date('2020-02-15') and date('2020-02-26')
GROUP BY CAST(time AS date)

实际输出

total   date
2   2020-02-17
1   2020-02-18
4   2020-02-20
7   2020-02-21
1   2020-02-23
3   2020-02-24
1   2020-02-25
1   2020-02-26

我的期望代码按范围日期参数事件数据显示每个日期为 0 或 null:

预期产出

  total date
0   2020-02-15
0   2020-02-16
2   2020-02-17
1   2020-02-18
0   2020-02-19
4   2020-02-20
7   2020-02-21
0   2020-02-22
1   2020-02-23
3   2020-02-24
1   2020-02-25
1   2020-02-26

标签: mysql

解决方案


您只能选择数据库中存在的数据。

要实现您想要的,请创建一个单独的表(一个临时的或永久的日历表),其中包含所需日期范围内的所有日期,并将该(连接)包含在您的查询中。


推荐阅读