LeetCode解析------626.換座位-數據庫

題目:

小美是一所中學的信息科技老師,她有一張 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;


在這裏插入圖片描述

結語:
晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章