請說明條件判斷語法 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
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們