LeetCode 數據庫面試題 – 換座位(Exchange Seats)

本頁內容

小美是一所中學的信息科技老師,她有一張 seat 座位表,平時用來儲存學生名字和與他們相對應的座位 ID,其中縱列的 ID 是連續遞增的。小美想改變相鄰倆學生的座位。

你能不能幫她寫一個 SQL query 來輸出小美想要的結果呢?

示例:

idstudent
1Abbot
2Doris
3Emerson
4Green
5Jeames

假如數據輸入的是上表,則輸出結果如下:

idstudent
1Doris
2Abbot
3Green
4Emerson
5Jeames

注意:

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

分析

依題,座位 ID 是連續的,我們可以獲取前後座位的信息,並做以下處理即可:

  • 當前座位 ID 為奇數,和後一個座位的同學換座。
  • 當前座位 ID 為偶數,和前一個座位的同學換座。
  • 如果前/後座位為空,則不換座。

解答

1SELECT
2    s.id,
3    IFNULL(IF(s.id%2=1, n.student, p.student), s.student) as student
4FROM seat s
5LEFT JOIN seat p ON p.id = s.id-1
6LEFT JOIN seat n ON n.id = s.id+1

原題

https://leetcode-cn.com/problems/exchange-seats