题目描述
(通过次数162,258 | 提交次数197,697,通过率82.07%)
Salary 表: +-------------+----------+ | Column Name | Type | +-------------+----------+ | id | int | | name | varchar | | sex | ENUM | | salary | int | +-------------+----------+ id 是这个表的主键。 sex 这一列的值是 ENUM 类型,只能从 ('m', 'f') 中取。 本表包含公司雇员的信息。 请你编写一个 SQL 查询来交换所有的 'f' 和 'm' (即,将所有 'f' 变为 'm' ,反之亦然),仅使用 单个 update 语句 ,且不产生中间临时表。 注意,你必须仅使用一条 update 语句,且 不能 使用 select 语句。 查询结果如下例所示。 示例 1: 输入: Salary 表: +----+------+-----+--------+ | 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 | +----+------+-----+--------+ 解释: (1, A) 和 (3, C) 从 'm' 变为 'f' 。 (2, B) 和 (4, D) 从 'f' 变为 'm' 。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/swap-salary
//测试数据 Create table If Not Exists Salary (id int, name varchar(100), sex char(1), salary int); insert into Salary (id, name, sex, salary) values ('1', 'A', 'm', '2500'); insert into Salary (id, name, sex, salary) values ('2', 'B', 'f', '1500'); insert into Salary (id, name, sex, salary) values ('3', 'C', 'm', '5500'); insert into Salary (id, name, sex, salary) values ('4', 'D', 'f', '500');
解题思路
Salary表中保存了性别sex信息,分别有’m’和’f’两个取值。
可能因为某种原因,这两个取值弄反了,题目要求把这两个值更新回去。
也就是说,当sex=’m’时,返回’f’;当sex=’f’时,返回’m’。使用CASE WHEN可以很方便的实现。
参考SQL
未特别说明的情况下,参考SQL为基于MySQL8.0实现。
update Salary set sex = case when sex='m' then 'f' else 'm' end;
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。