タイトル
与えられたsalary
以下に示すように、テーブル、持つm = 男性
とf = 女性
値。すべてのExchange f
とm
の値(例えば、全てのf
値を変更m
し、その逆)。それは一つだけアップデート(更新)声明、および中間の一時テーブルが必要です。
あなたが唯一の更新ステートメントを記述することに注意してください、任意のSELECT文を記述しないでください。
例えば:
ID | 名前 | 性別 | 給料 |
---|---|---|---|
1 | A | メートル | 2500 |
2 | B | F | 1500 |
3 | C | メートル | 5500 |
4 | D | F | 500 |
あなたが書かれている更新ステートメントを実行したら、次の表を取得します。
ID | 名前 | 性別 | 給料 |
---|---|---|---|
1 | A | F | 2500 |
2 | B | メートル | 1500 |
3 | C | F | 5500 |
4 | D | メートル | 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つのXOR結果の同じ値がゼロである場合。
使用MySQL
のif
機能は、if(sex = 'm', 'f', 'm')
も可能です。
---- MySQL ----
update salary set sex =
if(sex = 'm', 'f', 'm');
使用機能を。oracle
decode
---- oracle ----
update salary set sex =
decode(sex, 'm', 'f', 'f', 'm');
考えます
使用update
してcase...when...
動的に列の値を設定します。
ascii
コード変換、およびその後によってchar
文字列に変換されます。
答えるためにXOR演算を使用します。
従来if
とdecode
の答え。