627.Swap Salary-(LeetCode之Database篇)
问题描述
给出下面的表,名为salary。
| id | name | sex | salary |
|---|---|---|---|
| 1 | A | m | 2500 |
| 2 | B | f | 1500 |
| 3 | C | m | 5500 |
| 4 | D | f | 500 |
要求执行一个UPDATE语句,将表转换成下面的样子。
| id | name | sex | salary |
|---|---|---|---|
| 1 | A | f | 2500 |
| 2 | B | m | 1500 |
| 3 | C | f | 5500 |
| 4 | D | m | 500 |
即m与f交换位置。
问题解决
下面我使用SQL中的case when来解决问题。
#简单case函数写法
update salary
set sex = (case sex
when 'm' then 'f'
else 'm'
end)
#case搜索函数写法
update salary
set sex = (case
when sex = 'm' then 'f'
else 'm'
end)
这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。
进入讨论区后发现很多大神还有其它优秀的解决方案。例如:
UPDATE salary
SET sex = IF(sex='m','f','m')
当表中的某个字段只有两种情况时,可以使用上面的解法。
还有一种解法真是震惊到我了,那就是采用异或的思路。异或有两条规则是:
- 两个相同的数异或为0
- 0与任何数异或还是原数
所以就有了下面的解法:
update salary
set sex = CHAR(ASCII('f') ^ ASCII('m') ^ ASCII(sex))
如果sex为‘m’,三个数做异或后结果结果就为‘f’,这个解法真是相当巧妙。
可以看到这四种方式的运行速度快慢,使用异或的速度是最快的,IF函数的方式速度也还行,不过它只适用于字段只有两种可能的情况。而case when函数是我们最容易想到的,但是其运行速度就稍微的差了点。
627.Swap Salary-(LeetCode之Database篇)的更多相关文章
- 627. Swap Salary
627. Swap Salary SQL Schema Given a table salary, such as the one below, that has m=male and f=femal ...
- LeetCode - 627. Swap Salary
Given a table salary, such as the one below, that has m=male and f=female values. Swap all f and m v ...
- leetcode 627. Swap Salary 数据库带判断的更新操作
https://leetcode.com/problems/swap-salary/description/ 用 set keyWord = Case depentedWord when haha ...
- LeetCode 627. Swap Salary (交换工资)
题目标签: 题目给了我们一个 工资表格,让我们把 男女性别对换. 这里可以利用IF, IF(condition, value_if_true, value_if_false). Java Soluti ...
- [LeetCode] 627. Swap Salary_Easy tag: SQL
Given a table salary, such as the one below, that has m=male and f=female values. Swap all f and m v ...
- [SQL]LeetCode627. 交换工资 | Swap Salary
SQL架构 create table ), sex ), salary int) Truncate table salary insert into salary (id, name, sex, sa ...
- c++ LeetCode (初级字符串篇) 九道算法例题代码详解(二)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11089327.html 已经刷了很多篇leetcode题了,不过最近在找c++的实习工作(大佬 ...
- 【持续更新】leetcode算法-数组篇
会在近期陆续地完成数组篇的整理,希望对找工作的小伙伴有所帮助. 1.Two Sum:两数相加为一固定值,求其下标.一次遍历数组,用一个hash表存储已经访问过的数及其下标,对于新访问的数value ...
- LeetCode总结 -- 高精度篇
我们常见的一些主要的数据结构比方整型int或者浮点型float由于位数过多无法用内置类型存储,这时候我们就须要自己实现高精度的数据类型来进行存储和运算.这样的问题在实际产品中还是比較有用的,所以相对来 ...
随机推荐
- jquery即点击改
$(document).on("click",".sp",function(){ var brand_id=$(this).attr("valu ...
- vs中添加MySql实体集流程
默认情况下只有下图: 首先需要下载mysql为vs和ef提供的驱动(可以去官网下载对应的版本) 然后打开vs开始添加实体类 首先在NuGet中安装MySql.Data和MySql.Data.Entit ...
- C#与西门子PLC通讯
1.0 通讯组件概述 通讯组件用于PC与可编程控制器(PLC).智能仪表等进行数据通讯,适用于基于PC高级语言的工业自动化控制系统.组件采用动态链接库文件(*.DLL)的形式,在PC系统的项目工程里 ...
- Android——Intent详解
Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要. 一.什么是Intent 1.Intent的概念: Android中提供了Intent机制来协助应用间的交互与 ...
- python reversed
reversed()函数是返回序列seq的反向访问的迭代子.参数可以是列表,元组,字符串,不改变原对象. 例题: 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事 ...
- kill the lock
$ killall -s 9 krunner_lock [ZT][From:] http://www.commandlinefu.com/commands/view/2264/unlock-your- ...
- matlab 排列组合
0. gamma 函数与阶乘 gamma(n+1) == n! == prod(1:n); gammaln():gamma 函数的返回值,gammaln(A) = log(gamma(A)), 之所以 ...
- 好玩的WPF第四弹:用Viewport2DVisual3D实现3D旋转效果
原文:好玩的WPF第四弹:用Viewport2DVisual3D实现3D旋转效果 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https:// ...
- Git 内部原理--初探 .git
说到Git大家应该都非常熟悉,几乎每天都会用到它.在日常使用过程中,我们貌似并不需要关注其内部的原理,只需要记住那几个常用的命令,就可以说自己是会Git的人了.可是,事实真的是这样子的吗?今天我们就来 ...
- BZOJ 3329 Xorequ 数字DP+矩阵乘法
标题效果:特定n,乞讨[1,n]内[1,2^n]差多少x满足x^3x=2x x^3x=2x相当于x^2x = 3x 和3x=x+2x 和2x=x<<1 因此x满足条件IFFx&(x ...