请说明条件判断语法 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 上追蹤我們