條件分支 case when
是 SQL 中用於根據條件進行分支處理的語法。它類似於其他程式語言中的 if else
條件判斷語句,允許我們根據不同的條件選擇不同的結果返回。
使用 case when
可以在查詢結果中根據特定的條件動態生成新的列或對現有的列進行轉換。
舉個例子:假設你是一位餐廳的服務員,客人點了不同的菜品,而你需要根據客人點的菜來確定服務的方式。如果客人點了魚,你會用餐具和服務方式適合吃魚的方式來招待他們;如果客人點了牛排,你會用適合牛排的餐具和服務方式。case when
就像你根據客人點的菜品來選擇不同服務方式的過程。
示例
假設有一個學生表 student,包含以下欄位:name(姓名)、age(年齡)。資料如下:
name | age |
---|---|
小明 | 18 |
雞哥 | 25 |
李華 | 30 |
王五 | 40 |
使用條件分支 case when ,根據 name 來判斷學生是否會說 RAP,並起別名為 can_rap。
示例 SQL 如下:
SELECT name, CASE WHEN (name = '雞哥') THEN '會' ELSE '不會' END AS can_rap FROM student
查詢結果:
name | can_rap |
---|---|
小明 | 不會 |
雞哥 | 會 |
李華 | 不會 |
王五 | 不會 |
case when
支援同時指定多個分支,示例語法如下:
CASE WHEN (條件1) THEN 結果1 WHEN (條件2) THEN 結果2 ... ELSE 其他結果 END
習題
假設有一個學生表 student,包含以下欄位:name(姓名)、age(年齡)。請你編寫一個 SQL 查詢,將學生按照年齡劃分為三個年齡等級(age_level):60 歲以上為 "老同學",20 歲以上(不包括 60 歲以上)為 "年輕",20 歲及以下、以及沒有年齡資訊為 "小同學"。
返回結果應包含學生的姓名(name)和年齡等級(age_level),並按姓名升序排序。
name | age |
---|---|
雞哥 | 25 |
魚皮 | 18 |
熱dog | 40 |
摸FISH | |
李阿巴 | 19 |
老李 | 56 |
李變數 | 24 |
王加瓦 | 23 |
趙派森 | 80 |
孫加加 | 60 |
點選檢視答案
SELECT
name,
CASE
WHEN (age > 60) THEN '老同學'
WHEN (age > 20) THEN '年輕'
ELSE '小同學'
END AS age_level
FROM
student
ORDER BY
name asc