题目地址:https://leetcode.com/problems/exchange-seats/description/
Mary is a teacher in a middle school and she has a table seat storing students’ names and their corresponding seat ids.
The column id is continuous increment.
Mary wants to change seats for the adjacent students.
Can you write a SQL query to output the result for Mary?
+---------+---------+
| id | student |
+---------+---------+
| 1 | Abbot |
| 2 | Doris |
| 3 | Emerson |
| 4 | Green |
| 5 | Jeames |
+---------+---------+
For the sample input, the output is:
+---------+---------+
| id | student |
+---------+---------+
| 1 | Doris |
| 2 | Abbot |
| 3 | Green |
| 4 | Emerson |
| 5 | Jeames |
+---------+---------+
Note:
If the number of students is odd, there is no need to change the last one’s seat.
SELECT
*
FROM
(
SELECT id - 1 AS id, student
FROM seat
WHERE id MOD 2 = 0 /*id是偶数了*/
UNION
SELECT id + 1 AS id, student
FROM seat
WHERE id MOD 2 = 1 AND (SELECT MAX(id) FROM seat) MOD 2 = 0 /*总数是偶数,id是奇数*/
UNION
SELECT id + 1 AS id, student
FROM seat
WHERE id MOD 2 = 1 AND (SELECT MAX(id) FROM seat) MOD 2 = 1 AND id < (SELECT MAX(id) FROM seat) /*总数是奇数,id是奇数*/
UNION
SELECT id, student
FROM seat
WHERE (SELECT MAX(id) FROM seat) MOD 2 = 1 AND id = (SELECT MAX(id) FROM seat) /*总数是奇数,id最大的不动*/
) AS tt
ORDER BY
tt.id