小美是一所中學的信息科技老師,她有一張 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表連接起來。