請說明條件判斷語法 CASE 的用法
2022年9月29日
💎 加入 E+ 成長計畫 如果你喜歡我們的內容,歡迎加入 E+,獲得更多深入的軟體前後端內容
請說明條件判斷語法 CASE 的用法
跟多數程式語言一樣,在寫 SQL 時可以用 IF... ELSE
來寫條件判斷;也跟多數程式語言一樣,除了 IF
之外,也有 CASE
的條件判斷語法。許多程式語言會用 swtich... case
,而在 SQL 則有點不同,會是用 CASE... WHEN
,實際的用法如下:
CASE 某個欄位
WHEN '條件 1' THEN '結果 1'
WHEN '條件 2' THEN '結果 2'
... -- 這邊可以加入各類條件
ELSE '結果' -- 如果不符合以上條件的,會是這個結果
END -- 記得最後要寫這個結束語句
一樣讓我們透過一題實際的題目來了解怎麼透過 CASE
解。LeetCode 的 627. Swap Salary 正是可以用到 CASE
。這題的題目如下,有一個 Salary
表,其中的 sex
欄位是 ENUM
,有 'm'
與 'f'
兩種性別。題目要我們把資料庫的性別全部對調,本來是 'f'
的要變成 'm'
,而本來是 'm'
的則要變成 'f'
+-------------+----------+
| Column Name | Type |
+-------------+----------+
| id | int |
| name | varchar |
| sex | ENUM |
| salary | int |
+-------------+----------+
題目有給一個範例,可以看到下面的 Salary
表中 sex
的值都對調了。
輸入:
Salary table:
+----+------+-----+--------+
| id | name | sex | salary |
+----+------+-----+--------+
| 1 | A | m | 2500 |
| 2 | B | f | 1500 |
| 3 | C | m | 5500 |
| 4 | D | f | 500 |
+----+------+-----+--------+
輸出:
+----+------+-----+--------+
| id | name | sex | salary |
+----+------+-----+--------+
| 1 | A | f | 2500 |
| 2 | B | m | 1500 |
| 3 | C | f | 5500 |
| 4 | D | m | 500 |
+----+------+-----+--------+
透過 CASE 解
這個問題是很典型的條件判斷,要對調性別很簡單,用人話來描述就是「如果是 m
就改成 f
,如果不是 m
(換句話說,如果是 f
) 就改成 m
」,這句話如果要透過 SQL 來描述,可以寫成
CASE sex
WHEN 'm' THEN 'f'
WHEN 'f' THEN 'm'
END
-- 因為我們知道 sex 只有兩個值,所以可以更簡潔地寫成
CASE sex
WHEN 'm' THEN 'f'
ELSE 'm'
END
而個題目可以透過以下語法來解:
UPDATE salary
SET sex =
CASE sex
WHEN 'm' THEN 'f'
ELSE 'm'
END