在工作中,有時會碰到下面這種情況:
上司讓你分析個問題,但是資料庫中不能直接取到想要的字段,咋辦嘞?
莫慌,SQL的Case when語句幫你解決這個痛點~~~
※ Case when語句是多條件判斷的語句,用法是根據不同條件來傳回相應的值。結構如下:
Case when 條件1 then 結果1
when 條件2 then 結果2
....
else 結果n end
在工作中,Case when 語句可以運用在衍生字段、行列轉化、統計監控資料等方面。 ※ Case when用法1:衍生新字段目前在資料庫中有這麼一張order表,裡面的字段sex代表性别,1為男,2為女;buy_number代表購買次數。
但對于業務人員來說,sex=1,2不知道是什麼意思,為了友善業務了解,需要将相應的字段用Case when 語句處理下。
代碼如下:
select order_id,name,created_time,
(case when sex=1 then '男'
when sex=2 then '女'
else '其他' end) 性别 ,
(case when buy_number=1 then '首次購買'
when buy_number>1 then '多次購買'
else '其他' end) 購買類型
from order
輸出結果如下:
※ Case When用法2:監控統計針對案例1的情形,在業務分析時,經常需要做監控報表統計資料,這時聚合函數配合case when語句就事半功倍啦~
例如,我們需要按日統計
男性客戶首次購買人數、女性客戶首次購買人數、男性客戶多次購買人數,女性客戶多次購買人數這四個名額,就可以借鑒如下代碼:
select created_time 購買時間,
sum(case when sex=1 and buy_number=1 then 1 end) 男性首次購買人數,
sum(case when sex=2 and buy_number=1 then 1 end) 女性首次購買人數,
sum(case when sex=1 and buy_number>1 then 1 end) 男性多次購買人數,
sum(case when sex=2 and buy_number>1 then 1 end) 女性多次購買人數
from order
group by created_time
輸出結果如下:
Microsoft SQL Server
轉化如何把這個表A1轉化成為下面的表A2呢?
表A1
表A2
這類情形也可以通過Case when 語句實作,代碼如下:
select 姓名,
Max(case when 課程='國文' then 成績 else 0 end) 國文,
Max(case when 課程='數學' then 成績 else 0 end) 數學,
Max(case when 課程='科學' then 成績 else 0 end) 科學
from 表A1
group by 姓名
【小貼士】行列轉化時通常需要與Max函數或Min函數共同使用。覺得有所收獲的童鞋,可以掃描下方的二維碼關注我的微信公衆号~
微信公衆号:資料大作手