627.Swap Salary-(LeetCode之Database篇)
問題描述
給出下面的表,名為salary。
| 1 | A | m | 2500 |
| 2 | B | f | 1500 |
| 3 | C | m | 5500 |
| 4 | D | f | 500 |
要求執(zhí)行一個(gè)UPDATE語句,將表轉(zhuǎn)換成下面的樣子。
| 1 | A | f | 2500 |
| 2 | B | m | 1500 |
| 3 | C | f | 5500 |
| 4 | D | m | 500 |
即m與f交換位置。
?
?
問題解決
下面我使用SQL中的case when來解決問題。
#簡單case函數(shù)寫法 update salary set sex = (case sex when 'm' then 'f'else 'm'end) #case搜索函數(shù)寫法 update salary set sex = (case when sex = 'm' then 'f'else 'm'end)這兩種方式,可以實(shí)現(xiàn)相同的功能。簡單case函數(shù)的寫法相對比較簡潔,但是和case搜索函數(shù)相比,功能方面會有些限制,比如寫判定式。
進(jìn)入討論區(qū)后發(fā)現(xiàn)很多大神還有其它優(yōu)秀的解決方案。例如:
UPDATE salary SET sex = IF(sex='m','f','m')當(dāng)表中的某個(gè)字段只有兩種情況時(shí),可以使用上面的解法。
還有一種解法真是震驚到我了,那就是采用異或的思路。異或有兩條規(guī)則是:
- 兩個(gè)相同的數(shù)異或?yàn)?
- 0與任何數(shù)異或還是原數(shù)
所以就有了下面的解法:
update salary set sex = CHAR(ASCII('f') ^ ASCII('m') ^ ASCII(sex))如果sex為‘m’,三個(gè)數(shù)做異或后結(jié)果結(jié)果就為‘f’,這個(gè)解法真是相當(dāng)巧妙。
可以看到這四種方式的運(yùn)行速度快慢,使用異或的速度是最快的,IF函數(shù)的方式速度也還行,不過它只適用于字段只有兩種可能的情況。而case when函數(shù)是我們最容易想到的,但是其運(yùn)行速度就稍微的差了點(diǎn)。
轉(zhuǎn)載于:https://www.cnblogs.com/KKSJS/p/9622819.html
總結(jié)
以上是生活随笔為你收集整理的627.Swap Salary-(LeetCode之Database篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 佳能对焦点设置(佳能调整对焦点)
- 下一篇: iPhone 12什么时候开启预购什么时