SQL—day6
题目
给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求只使用一个更新(Update)语句,并且没有中间的临时表。
注意,您必只能写一个 Update 语句,请不要编写任何 Select 语句。
例如:
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 WHEN
一旦满足了某一个WHEN, 则这一条数据就会退出CASE WHEN , 不再考虑其他CASE
即
CASE函数只返回第一个符合条件的值,剩下的CASE部分将会被自动忽略.
②
if(a,b,c)
if判断,如果a满足条件,返回b,否则返回c
③
ASCII(string) : 将字符串的第一个字符转换成ASCII码的形式
CHAR(int) : 将ASCII码转换成字符
char(ASCII(Col_Num)+1) #将字符顺延一位
思路
1. CASE WHEN 匹配
2. IF函数筛选
3. ASCII转化
代码
update salary
set sex = (
case sex when 'm' then 'f' else 'm' end
);
update salary set sex = if(sex='m','f','m');
update salary set sex = char(ascii('m') + ascii('f') - ascii(sex));
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-salary