请说明条件判断语法 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