CASE
WHEN 條件1 THEN 結果1
WHEN 條件2 THEN 結果2
WHEN 條件3 THEN 結果3
WHEN 條件4 THEN 結果4
.........
WHEN 條件N THEN 結果N
ELSE 結果X
END
Case具有兩種格式。簡單Case函數和Case搜尋函數。
--簡單Case函數
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜尋函數
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
例如:
SELECT id, name, cj, (CASE WHEN cj < 60 THEN '不及格' WHEN cj BETWEEN 60 AND 90 THEN '良好' WHEN cj > 90 THEN '優秀' END) AS 狀態
FROM stud
這兩種方式,可以實現相同的功能。簡單Case函數的寫法相對比較簡潔,但是和Case搜尋函數相比,功能方面會有些限制,比如寫判斷式。
還有一個需要注意的問題,Case函數只返回第一個合格值,剩下的Case部分將會被自動忽略。
--比如說,下面這段SQL,你永遠無法得到“第二類”這個結果
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一類'
WHEN col_1 IN ('a') THEN '第二類'
ELSE'其他' END
下面我們來看一下,使用Case函數都能做些什麼事情。
一,已知資料按照另外一種方式進行分組,分析。
有如下資料:(為了看得更清楚,我並沒有使用國家代碼,而是直接用國家名作為Primary Key)
國家(country) 人口(population)
中國 600
美國 100
加拿大 100
英國 200
法國 300
日本 250
德國 200
墨西哥 50
印度 250
根據這個國家人口資料,統計亞洲和北美洲的人口數量。應該得到下面這個結果。
洲 人口