zoukankan      html  css  js  c++  java
  • LeetCode:627.交换工资

    题目链接:https://leetcode-cn.com/problems/swap-salary/

    题目

    给定一个 salary 表,如下所示,有 m = 男性f = 女性 的值。交换所有的 fm 值(例如,将所有 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
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解答

    虽然不知道为什么这么写。。但自己写的。。居然通过了。。

    ---- MySQL ----
    # Write your MySQL query statement below
    update salary set sex = 
    case when sex = 'm' then 'f'
         when sex = 'f' then 'm' end  ---- 119ms
    

    Oracle提交也可以通过,不过执行很慢,1151ms。

    看到一个神操作,通过ascii码转换,再通过char转换为字符串,666!

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

    还有通过异或运算得到结果的。

    ---- MySQL ----
    update salary set sex = 
    char(ascii(sex)^ascii('f')^ascii('m'));  ---- 120ms
    

    异或运算:当2个相同的值进行异或运算,结果为0。

    使用MySQLif函数,if(sex = 'm', 'f', 'm')也可以。

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

    使用oracledecode函数。

    ---- oracle ----
    update salary set sex = 
    decode(sex, 'm', 'f', 'f', 'm');
    

    思考

    使用updatecase...when...进行动态将值设置成列。

    通过ascii码转换,再通过char转换为字符串。

    使用异或运算进行解答。

    使用常规的ifdecode进行解答。

  • 相关阅读:
    原生CSS、HTML 和 JavaScript 实现酷炫表单
    Vite2 如何设置打包后文件名
    读罢effective java,并不感觉特别好
    第六章部分习题答案
    第七章部分习题答案
    第八章部分习题答案
    mybatis 3.3.0之前版本的一个空指针BUG
    避免使用finalize方法
    mlp房价预测
    逻辑回归
  • 原文地址:https://www.cnblogs.com/hider/p/11737222.html
Copyright © 2011-2022 走看看