打工人打工魂!銷售分析案例來啦!

某公司要了解1月、2月各個銷售員的銷售情況怎么樣?銷售記錄表如下:

要求輸出格式如下:

【解題思路】
此題主要考察 case when 行列的轉(zhuǎn)換問題,即如下圖所示:

通過case when 的轉(zhuǎn)換,把列的項目轉(zhuǎn)換成行字段,有兩種方法供參考,其中第一個方法較為簡潔。
一、行列轉(zhuǎn)換匯總求和
1、利用cese when語句先分別對銷售員判斷,然后得到每個銷售員每日的銷售金額。銷售員原來為列里的一項,通過case when 轉(zhuǎn)換為行的項目

2、加上日期字段進行查詢


3、按月份、銷售員匯總
1)、因銷售記錄中時間字段是具體的日期,題目要求是按照“月份”分組,需要用date_format函數(shù)把日期轉(zhuǎn)為月份。
2)、對銷售員按照“月份”匯總,在case when 篩選的基礎(chǔ)上再用sum求和,得到每個銷售員每個月總的銷售金額。

得到查詢結(jié)果:

二、臨時表查詢
1、利用cese when語句先分別對銷售員判斷,得到每個銷售員每日的銷售金額,銷售員原來為列里的一項,通過case when?轉(zhuǎn)換為行的項目

2、把第一步的查詢作為一個臨時表a,然后對表a的查詢結(jié)果按月份進行匯總查詢。


上面的結(jié)果與題意要求的還有些差距,因“小李”1月份沒有銷售額,該值為NULL,因題意要求為0,利用case when 把NULL改為?0,調(diào)整代碼如下:

得到要求的結(jié)果如下:

【本題考點】
1、重點考查用case?when語句進行列數(shù)據(jù)轉(zhuǎn)換和條件判斷,在實際工作中,這個語句是經(jīng)常用到的
???case?when?<判斷表達式>?then?<表達式>?else?<表達式>?end
另外,case when有兩種格式:簡單函數(shù),搜索函數(shù)。他們的用法,詳見case when 函數(shù)的詳細介紹。
2、case when表達式的聚合,可以用sum,max,avg等對篩選的表達式結(jié)果再進行一次聚合,如:
sum(case?when?<判斷表達式>?then?<表達式>?else?<表達式>?end?)
3、年+月的表達方法
??SQL中,單獨的對字段取年、月,用相應(yīng)的函數(shù)
year(日期字段)???對日期字段取年份
month(日期字段)??對日期字段取月份
但是,要取“年+月”,可以采用函數(shù)
date_format(date,format)
date_format(date,format )函數(shù)為SQL中設(shè)置時間格式的函數(shù),其中括號里的“date”是要設(shè)置的日期,“format”?是設(shè)置成規(guī)定日期/時間的格式。根據(jù)format字符串格式化date值。下列字符和字符串是常用的:

格式化日期常用的字符串:

