天天看點

casewhen多條件查詢_SQL查詢語句進階篇-讓你大吃一驚的Case When語句

casewhen多條件查詢_SQL查詢語句進階篇-讓你大吃一驚的Case When語句

在工作中,有時會碰到下面這種情況:

上司讓你分析個問題,但是資料庫中不能直接取到想要的字段,咋辦嘞?

casewhen多條件查詢_SQL查詢語句進階篇-讓你大吃一驚的Case When語句

莫慌,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代表購買次數。

casewhen多條件查詢_SQL查詢語句進階篇-讓你大吃一驚的Case When語句

但對于業務人員來說,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

輸出結果如下:

casewhen多條件查詢_SQL查詢語句進階篇-讓你大吃一驚的Case When語句
※ 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

輸出結果如下:

casewhen多條件查詢_SQL查詢語句進階篇-讓你大吃一驚的Case When語句

Microsoft SQL Server

轉化

如何把這個表A1轉化成為下面的表A2呢?

表A1

casewhen多條件查詢_SQL查詢語句進階篇-讓你大吃一驚的Case When語句

表A2

casewhen多條件查詢_SQL查詢語句進階篇-讓你大吃一驚的Case When語句

這類情形也可以通過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函數共同使用。

覺得有所收獲的童鞋,可以掃描下方的二維碼關注我的微信公衆号~

微信公衆号:資料大作手

casewhen多條件查詢_SQL查詢語句進階篇-讓你大吃一驚的Case When語句