問(wèn)題描述: 查詢數(shù)據(jù)庫(kù)時(shí)料扰,先根據(jù)數(shù)據(jù)記錄的日期分組代承,再根據(jù)另一字段龟梦,如:例子中使用"store_id"這一字段(店鋪名稱)再分組隐锭,我們要獲得的數(shù)據(jù)按日期、store_id分組后的所有數(shù)據(jù)计贰。但是有的店鋪在某個(gè)日期下沒(méi)有數(shù)據(jù)钦睡,那么分組后查不到,如下圖所示
店鋪 昨日銷量
store1 124
store2 532
store3 325
store4 665
某天由于“store3”停業(yè)躁倒,當(dāng)日“store3”在store_table表中沒(méi)有數(shù)據(jù)荞怒。
當(dāng)?shù)诙煨枰鲎蛉請(qǐng)?bào)表數(shù)據(jù)時(shí)。
報(bào)表原本預(yù)想展示的數(shù)據(jù)如下:
店鋪 昨日銷量
store1 168
store2 480
store3 0
store4 720
但是當(dāng)日?qǐng)?bào)表實(shí)際展示為:
店鋪 昨日銷量
store1 168
store2 480
store4 720
附:area_table 表結(jié)構(gòu):
store_table表結(jié)構(gòu):
解題思路:
①首先拿到包含所有日期和所有店鋪名稱的這張表area_store_table秧秉,使用笛卡兒積關(guān)聯(lián)area_table表和store_area表即可
②使用原來(lái)的代碼拿到未達(dá)期望值的表unperfect_table
③利用數(shù)據(jù)庫(kù)表的left join關(guān)聯(lián)查詢褐桌,左邊主表就是area_store_table(因?yàn)閘eft join時(shí)主表的數(shù)據(jù)全部顯示),右邊副表就是我們之前查詢到的未查全的表unperfect_table
④得到期望結(jié)果
注: DATE_SUB(curdate(),INTERVAL 1 DAY) 該函數(shù)意為:求出昨天的日期象迎;
實(shí)現(xiàn)過(guò)程:
1.使用curdate()求出當(dāng)天日期荧嵌;
2.使用DATE_SUB(當(dāng)天日期,INTERVAL 1 DAY)實(shí)現(xiàn)當(dāng)天日期減一天的日期,即昨日日
期砾淌;
思考總結(jié):一開(kāi)始使用笛卡爾積嵌套select的時(shí)候啦撮,查詢結(jié)果不對(duì)。單獨(dú)把笛卡爾積結(jié)果建表后汪厨,得出正確的結(jié)果赃春。說(shuō)明前面的操作過(guò)程肯定哪個(gè)地方出了問(wèn)題,中途也遇到過(guò)表數(shù)據(jù)不正確導(dǎo)致結(jié)果未達(dá)期望劫乱,所以每一個(gè)步驟都要非常仔細(xì)织中,包括表數(shù)據(jù),表查詢衷戈。