【原创】sql语句查询某字段在对应日期无数据时显示为0

问题描述: 查询数据库时,先根据数据记录的日期分组,再根据另一字段,如:例子中使用"store_id"这一字段(店铺名称)再分组,我们要获得的数据按日期、store_id分组后的所有数据。但是有的店铺在某个日期下没有数据,那么分组后查不到,如下图所示

店铺 昨日销量

store1 124

store2 532

store3 325

store4 665

某天由于“store3”停业,当日“store3”在store_table表中没有数据。

当第二天需要出昨日报表数据时。

报表原本预想展示的数据如下:

店铺 昨日销量

store1 168

store2 480

store3 0

store4 720

但是当日报表实际展示为:

店铺 昨日销量

store1 168

store2 480

store4 720

附:area_table 表结构


store_table表结构:

解题思路:

首先拿到包含所有日期和所有店铺名称的这张表area_store_table,使用笛卡儿积关联area_table表和store_area表即可

使用原来的代码拿到未达期望值的表unperfect_table

利用数据库表的left join关联查询,左边主表就是area_store_table(因为left join时主表的数据全部显示),右边副表就是我们之前查询到的未查全的表unperfect_table

得到期望结果


注: DATE_SUB(curdate(),INTERVAL 1 DAY) 该函数意为:求出昨天的日期;

实现过程:

1.使用curdate()求出当天日期;

2.使用DATE_SUB(当天日期,INTERVAL 1 DAY)实现当天日期减一天的日期,即昨日日

期;


思考总结:一开始使用笛卡尔积嵌套select的时候,查询结果不对。单独把笛卡尔积结果建表后,得出正确的结果。说明前面的操作过程肯定哪个地方出了问题,中途也遇到过表数据不正确导致结果未达期望,所以每一个步骤都要非常仔细,包括表数据,表查询。

你可能感兴趣的:(【原创】sql语句查询某字段在对应日期无数据时显示为0)