MySQL之LeetCode-627(交换工资)

16 篇文章 0 订阅
16 篇文章 0 订阅

题目(简单)

给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求只使用一个更新(Update)语句,并且没有中间的临时表。

注意,您必只能写一个 Update 语句,请不要编写任何 Select 语句。

例如:

idnamesexsalary
1Am2500
2Bf1500
3Cm5500
4Df500

运行你所编写的更新语句之后,将会得到以下表:

idnamesexsalary
1Af2500
2Bm1500
3Cf5500
4Dm500

SQL架构

create table if not exists salary(id int, name varchar(100), sex char(1), salary int)
Truncate table salary
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')

解题语句

使用IF

update salary set sex= if(sex='m','f','m')

使用CASE

UPDATE salary
SET
    sex = CASE sex
        WHEN 'm' THEN 'f'
        ELSE 'm'
    END;

字母和ASCII互转

update salary set sex = char(ascii('m') + ascii('f') - ascii(sex));

优秀评论

Case具有两种格式。
简单Case函数和Case搜索函数。 
第一种 格式 : 简单Case函数 : 
格式说明       
case 列名     
when   条件值1   then  选择项1     
 when   条件值2    then  选项2.......     
 else     默认值      
 end 
 eg: 
 select  
 case   job_level 
 when     '1'     then    '1111' 
 when   '2'     then    '1111'
  when   '3'     then    '1111' 
  else       'eee' 
  end 
  from     dbo.employee 
  第二种  格式 :Case搜索函数 
  格式说明         
  case       
  when  列名= 条件值1   then  选择项1   
  when  列名=条件值2    then  选项2.......   
  else    默认值 
  end 
  eg: 
  update  employee 
  set   e_wage = 
  case when   job_level = '1'    then e_wage*1.97
   when   job_level = '2'   then e_wage*1.07 
   when   job_level = '3'   then e_wage*1.06 
   else     e_wage*1.05
    end
来自用户:hanha
IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。
IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
SELECT IF(sva=1,"男","女") AS s FROM table_name 
WHERE sva != '';
来自用户:初音喵喵喵
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值