第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

leetcode MySQL 實(shí)現(xiàn)交換工資問題

標(biāo)簽:
MySQL

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

题目分析

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

给定一个 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    |

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

参考答案

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

-- 使用 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 中本来就不需要中间变量,一行代码就搞定:

a, b = b, a

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

b = a + b - a
a = a + b - b

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

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

UPDATE salary
SET sex = char(ascii('f') + ASCII('m') - ASCII(sex));

总结

  • 注意 “和” 的思想
  • 代码中如何实现不引入其他变量达到变换变量的目的,对于这一实现,除了上面说的方式,还有另外一种,即按位异或,即思想是一样的,只是把 “+” 换成 “^”。参考如下:
a = a ^ b
b = a ^ b
a = a ^ b
點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報(bào)

0/150
提交
取消