題目
某公司數據庫有三張表,周度銷售表、店鋪信息表、日銷售明細表。
表一:周度銷售表記錄了每個自然周全國店鋪的銷售信息,字段包含了周、店鋪代碼、吊牌金額、銷售金額。
表二:店鋪信息表記錄店鋪所在的區域,店鋪對應的層級關係及業務類型,字段包含店鋪代碼、區域、上級客戶簡稱、業務類型。
表三:日銷售明細表記錄了每天全國不同區域的店鋪銷售商品的金額,客戶性質及商品信息,字段包含區域、上級客戶簡稱、上級客戶代碼、客戶性質、店鋪代碼、銷售日期、銷售金額、商品編碼。
業務需求
1.對於不同區域、業務類型的吊牌金額、銷售金額進行彙總(時間範圍202201–202205周。
2.抽取區域爲華東區、華中區、華西區、華南區的,並且客戶性質爲自營的,2022年3月及同期的日銷售數據。
解題思路
1.對於不同區域、業務類型的吊牌金額、銷售金額進行彙總(時間範圍202201–202205周)
我們先來把這個業務需求翻譯成大白話:
1)查詢結果需要的字段是區域、業務類型、吊牌金額、銷售金額
2)篩選時間周爲202201–202205
3)對於不同區域、業務類型的吊牌金額、銷售金額進行彙總
1)查詢結果需要的字段是區域、業務類型、吊牌金額、銷售金額
吊牌金額、銷售金額在周度銷售表中,區域、業務類型在店鋪信息表中,涉及到兩個表的字段,所以需要進行多表聯結。
觀察兩個表,得知兩表的名稱相同且有關聯的字段爲店鋪代碼,用店鋪代碼聯結兩張表。
使用哪種聯結呢?拿出《猴子 從零學會SQL》裏面的多表聯結圖。
因爲需要得到每個店鋪代碼對應的業務類型,所以用左連接保留周度銷售表中所有的銷售數據。
SQL書寫如下:
1 select *
2 from 周度銷售表 a
3 left join 店鋪信息表 b
4 on a.店鋪代碼 = b.店鋪代碼;
2)篩選時間周爲202201–202205,使用between 函數來篩選時間範圍。
SQL書寫如下:
1 select *
2 from 周度銷售表 a
3 left join 店鋪信息表 b
4 on 店鋪代碼 = b.店鋪代碼
5 where 周 between 202201 and 202205;
查詢結果:
3)對於不同區域、業務類型的吊牌金額、銷售金額進行彙總
業務需求僅顯示吊牌金額和銷售金額,我們使用分組彙總來對不同區域、業務類分組 (group by),對吊牌金額、銷售金額進行彙總求和(求和函數sum)
SQL書寫如下:
1 select 區域,
2 業務類型,
3 sum(a.吊牌金額) AS “總吊牌金額”,
4 sum(a.銷售金額) AS “總銷售金額”
5 from 周度銷售表 a
6 left join 店鋪信息表 b
7 on a.店鋪代碼 = b.店鋪代碼
8 where 周 between 202201 and 202205
9 group by 業務類型,區域;
查詢結果:
2、抽取區域爲華東區、華中區、華西區、華南區的,並且客戶性質爲自營的,2022年3月及同期的日銷售數據。
需求顯示字段區域、客戶性質、銷售日期,日銷售明細表都包含,現在只需要將客戶性質爲“自營”和時間爲2022年3月及2021年3月(同期)數據顯示即可。
SQL中使用date_format將日銷售表中的銷售日期格式設置爲年月格式。
SQL書寫如下:
1 select *
2 from 日銷售明細表
3 where 區域 in (
4 “華東區”,
5 “華中區”,
6 “華西區”,
7 “華南區” )
8 and 客戶性質 = “自營”
9 and date_format(銷售日期, ‘%Y-%m’) between “2021–03” and “2022–03”;
查詢結果:
文章來源:猴子數據分析
原文鏈接:https://zhuanlan.zhihu.com/p/657278984
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
文章推薦
◆跟資料打交道的人都得會的這8種資料模型,滿足工作中95%的需求
關注數據君的臉書:
我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。按贊我的臉書,會有豐富資料包贈送唷!