leetcode-SQL 626. 換座位(難度:中等)--奇偶數和case when的使用

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

注意:

如果學生人數是奇數,則不需要改變最後一個同學的座位。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/exchange-seats

 

奇數id+1,偶數id-1,但有一個例外:當爲奇數且是最後一個那麼不用變。

select case 
when(mod(id,2)=1 and id<>max_id) then id+1
when(mod(id,2)=1 and id=max_id) then id
else id-1
end as id,
student
from seat,
(select count(*) max_id from seat) count_seat
order by id;

(select count(*) max_id from seat) count_seat  這一句最外的括號不要去掉,因爲每個子查詢都需要有命名;

查詢中select後用到的max_id是從這個子查詢中查出的結果,與子查詢命名無關;

這裏不需要把seat表和count_seat表連接起來。

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