【題目】
某公司資料庫有三張表,周度銷售表、店鋪信息表、日銷售明細表。
表一:周度銷售表記錄了每個自然周全國店鋪的銷售信息,欄位包含了周、店鋪代碼、吊牌金額、銷售金額。
表二:店鋪信息表記錄店鋪所在的區域,店鋪對應的層級關係及業務類型,欄位包含店鋪代碼、區域、上級客戶簡稱、業務類型。
表三:日銷售明細表記錄了每天全國不同區域的店鋪銷售商品的金額,客戶性質及商品信息,欄位包含區域、上級客戶簡稱、上級客戶代碼、客戶性質、店鋪代碼、銷售日期、銷售金額、商品編碼。
業務需求:
1.對於不同區域、業務類型的吊牌金額、銷售金額進行匯總(時間範圍202201-202205周。
2.抽取區域為華東區、華中區、華西區、華南區的,並且客戶性質為自營的,2022年3月及同期的日銷售數據。
【解題思路】
1.對於不同區域、業務類型的吊牌金額、銷售金額進行匯總(時間範圍202201-202205周)
我們先來把這個業務需求翻譯成大白話:
1)查詢結果需要的欄位是區域、業務類型、吊牌金額、銷售金額
2)篩選時間周為202201-202205
3)對於不同區域、業務類型的吊牌金額、銷售金額進行匯總
1)查詢結果需要的欄位是區域、業務類型、吊牌金額、銷售金額
吊牌金額、銷售金額在周度銷售表中,區域、業務類型在店鋪信息表中,涉及到兩個表的欄位,所以需要進行多表聯結。
觀察兩個表,得知兩表的名稱相同且有關聯的欄位為店鋪代碼,用店鋪代碼聯結兩張表。
使用哪種聯結呢?拿出《猴子 從零學會SQL》裡面的多表聯結圖。
因為需要得到每個店鋪代碼對應的業務類型,所以用左連接保留周度銷售表中所有的銷售數據。
SQL書寫如下:
2)篩選時間周為202201-202205,使用between 函數來篩選時間範圍。
SQL書寫如下:
查詢結果:
3)對於不同區域、業務類型的吊牌金額、銷售金額進行匯總
業務需求僅顯示吊牌金額和銷售金額,我們使用分組匯總來對不同區域、業務類分組 (group by),對吊牌金額、銷售金額進行匯總求和(求和函數sum)
SQL書寫如下:
查詢結果:
2、抽取區域為華東區、華中區、華西區、華南區的,並且客戶性質為自營的,2022年3月及同期的日銷售數據。
需求顯示欄位區域、客戶性質、銷售日期,日銷售明細表都包含,現在只需要將客戶性質為「自營」和時間為2022年3月及2021年3月(同期)數據顯示即可。
SQL中使用date_format將日銷售表中的銷售日期格式設置為年月格式。
SQL書寫如下:
查詢結果:
【本題考點】
1.業務需求拆解為一個個問題,試著翻譯成大白話,根據需求找出連接與突破點。
2.SQL中最常見的幾種聯結應該如何使用,學習參考猴子免費教程《圖解SQL面試題》。
3.數據表中日期格式如果不是我們想要的呈現結果,學會date_format函數進行轉化。