请说明条件判断语法 CASE 的用法
2022年9月29日
💎 加入 E+ 成長計畫 與超過 800+ 位工程師一同在社群成長,並獲得更多深度的軟體前後端學習資源
请说明条件判断语法 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