mysql - 如何按日期分组(如果为空则选择 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
解决方案
您只能选择数据库中存在的数据。
要实现您想要的,请创建一个单独的表(一个临时的或永久的日历表),其中包含所需日期范围内的所有日期,并将该(连接)包含在您的查询中。
推荐阅读
- python - 如何在损失正常的情况下修复深度学习中的零精度
- java - 如何将一串数字转换为整数数组?
- laravel - 返回在数据透视表中创建记录的实例
- python - 在 numpy.linalg (Python) 中使用 linalg.matrix_rank 的意外结果
- r - 尝试通过“order”函数对 R xts 对象进行排序
- jquery - 使用 jQuery 链接到下一个容器,如何添加偏移量?
- python - 如何使用 Python 将 HTML 从信息传递到 MySQL 数据库?
- android - 在子布局的editText中输入数据时,Android可扩展Listview子视图行为不正确
- amazon-web-services - AWS API Gateway 授权方:同时要求 OAuth 令牌和 API 密钥可以获得什么安全性?
- android - 如何在不同的tablelayouts android studio(java)中添加viewpager