LeetCode - 627. 交换薪水(Swap Salary)

Posted by zihengCat on 2018-05-25

前言

本文记录LeetCode - 627. 交换薪水(Swap Salary)问题。

问题描述

给出一张名为salary的SQL table(如下所示),其中,m=malef=female。请你仅使用一条UPDATE查询语句(不建立临时表)交换fm的值(即将所有的f都变成mm变成f)。

比如有这样一张SQL表:

| 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    |

问题解法

这是一道简单的SQL题目。更新SQL表使用UPDATE查询,而交换性别值(字符串)则可以使用IF函数完成,其语法格式如下所示。

IF(expr1, expr2, expr3)
expr1 == true ? expr2 : expr3

注:IF函数语法说明

UPDATE salary
SET sex = IF(sex = "m", "f", "m");

代码清单:SQL查询语句(IF函数)

拓展延伸

IF函数虽然简单好用,但是只能处理两种情况,对于多种(大于2)选项情况的查询,就可以考虑使用CASE...WHEN结构。比如这道题,可以改写成CASE...WHEN结构。

UPDATE salary
SET sex =
CASE
    WHEN sex = "m" THEN "f"
    WHEN sex = "f" THEN "m"
END;

代码清单:SQL查询语句(CASE...WHEN结构)

参考资料