626.组合两个表
| 序号 | 题目 | 难度 |
|---|---|---|
| 626 | 题目链接 | 中等 |
题目大意
编写解决方案来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。
按 id 升序 返回结果表。
表: Seat
| Column Name | Type |
|---|---|
| id | int |
| student | varchar |
id 是该表的主键(唯一值)列。 该表的每一行都表示学生的姓名和 ID。 ID 序列始终从 1 开始并连续增加。
示例
输入
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 |
解释
请注意,如果学生人数为奇数,则不需要更换最后一名学生的座位。
参考答案
select
id
,(case when id % 2 = 0
then (case when (lag(student) over(order by id)) is null then student else (lag(student) over(order by id)) end)
else (case when (lead(student) over(order by id)) is null then student else (lead(student) over(order by id)) end)
end) as student
from seat;