第十三周_A-LeetCode-SQL

68 阅读1分钟

leetcode.cn/problems/ex…

题目

编写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 (这里多个判断,当最后一个是期数,就不变)