题目
编写SQL查询来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。
按 id 升序 返回结果表。
示例:
输入:
Seat 表:
+----+---------+
| id | student |
+----+---------+
| 1 | Abbot |
| 2 | Doris |
| 3 | Emerson |
| 4 | Green |
| 5 | Jeames |
+----+---------+
输出:
+----+---------+
| id | student |
+----+---------+
| 1 | Doris |
| 2 | Abbot |
| 3 | Green |
| 4 | Emerson |
| 5 | Jeames |
+----+---------+
case when
SELECT
(
CASE
WHEN id % 2 = 0 THEN id - 1
WHEN id % 2 = 1 AND id != (SELECT COUNT(*) FROM seat) THEN id + 1
ELSE id
END
) id,
student
FROM seat
ORDER BY id;
思路就是:
偶数的 id - 1;奇数的 id + 1 (这里多个判断,当最后一个是期数,就不变)