问题描述: 查询数据库时,先根据数据记录的日期分组,再根据另一字段,如:例子中使用"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的时候,查询结果不对。单独把笛卡尔积结果建表后,得出正确的结果。说明前面的操作过程肯定哪个地方出了问题,中途也遇到过表数据不正确导致结果未达期望,所以每一个步骤都要非常仔细,包括表数据,表查询。
网友评论