題目:
小美是一所中學的信息科技老師,她有一張 seat 座位表,平時用來儲存學生名字和與他們相對應的座位 id。
其中縱列的 id 是連續遞增的
小美想改變相鄰倆學生的座位。
你能不能幫她寫一個 SQL query 來輸出小美想要的結果呢?
示例:
±--------±--------+
| id | student |
±--------±--------+
| 1 | Abbot |
| 2 | Doris |
| 3 | Emerson |
| 4 | Green |
| 5 | Jeames |
±--------±--------+
假如數據輸入的是上表,則輸出結果如下:
±--------±--------+
| id | student |
±--------±--------+
| 1 | Doris |
| 2 | Abbot |
| 3 | Green |
| 4 | Emerson |
| 5 | Jeames |
±--------±--------+
簡單介紹:
題目:換座位
題目難度:中等
使用語言:MySQL。
這道題來自leetcode題庫的數據庫標籤。
解題思路:
首先看題、分析題意,我們可以明確2個關鍵點:
1.最後一位是奇數,不調整。
2.其餘同學與相鄰的同學調整位置
既然,我們已經分析出來題目的關鍵任務了,下面我們就可以開始思考實現了。
我們採用算法與數據結構的思路來剖析一下這題,
SQL解法:
1.判斷最後一位同學的位置是否是奇數位,如果是,則不調整位置,否則調整位置
2.在上面判斷的基礎上,遇到奇數位+1,遇到偶數位-1
3.按以上方式處理後,對id進行一次排序,即可完成位置調整。
代碼部分:
select (
case
when mod(id,2)=1 and id=(select count(*) from seat) then id#最後一個奇數不換位
when mod(id,2)=1 then id+1#奇數從1開始
else id-1
end
) as id,student
from seat
order by id;
結語:
晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!