前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode MySQL 实现交换工资问题

leetcode MySQL 实现交换工资问题

作者头像
用户7685359
发布2020-08-24 16:21:54
6180
发布2020-08-24 16:21:54
举报
文章被收录于专栏:FluentStudy

leetcode MySQL 实现交换工资问题,不是很难,但是有一个解题思路特别有意思。

题目分析

因为题目不是很长,这里把题目贴出来:

代码语言:javascript
复制
给定一个 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    |

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-salary

题目意思很简单,就是交换性别,将原来所有是男生的变成女生,所有女生变成男生,而且只能用一个 UPDATE 语句实现,任何 SELECT 语句都不能出现,意味着不能先查询后更新,必须是一次性实现这个效果。

参考答案

首先,如果熟悉 MySQL 语法的很容易想到用 IF 或者 CASE WHEN,答案如下:

代码语言:javascript
复制
-- 使用 CASE
UPDATE salary
SET sex = CASE 
    WHEN sex = 'm' THEN 'f'
    ELSE 'm'
END;

-- 使用 IF
UPDATE salary
SET sex = if(sex = 'f', 'm', 'f');

如果对 CASE WHEN 和 IF 语法不熟悉的,可以再换种思路。交换“性别”,我们可以转换为代码中的交换“变量”,不能用到 SELECT ,不就很像在代码中交换“变量”时,不能引入其他变量吗?于是,这个题目就转换为:

如何在不引入中间变量的情况下,交换两个变量的值呢?

你可能会说,在 Python 中本来就不需要中间变量,一行代码就搞定:

代码语言:javascript
复制
a, b = b, a

但如果是其他语言呢?或者让你来实现 Python 的这种方式呢?很明显也是有方法的,这也是经常会遇到的一个笔试题,关键点在于:

代码语言:javascript
复制
b = a + b - a
a = a + b - b

# 交换变量,只需要交换
a = a + b
b = a - b  # b 变成了 a
a = a - b  # a 变成了 b

利用这一个思想,我们只需要拿到和,再用 “和” 减去当前的 “性别”,即可改变性别。而这里的 “性别” 是字符,显然字符是可以转换为 ascii 变为对应的数字的,因此题目就变得简单了,答案如下:

代码语言:javascript
复制
UPDATE salary
SET sex = char(ascii('f') + ASCII('m') - ASCII(sex));

总结

  • 注意 “和” 的思想
  • 代码中如何实现不引入其他变量达到变换变量的目的,对于这一实现,除了上面说的方式,还有另外一种,即按位异或,即思想是一样的,只是把 "+" 换成 "^"。参考如下:
代码语言:javascript
复制
a = a ^ b
b = a ^ b
a = a ^ b
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FluentStudy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目分析
  • 参考答案
  • 总结
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档