一、准备工作
Create table If Not Exists Seat (id int, student varchar(255));
Truncate table Seat;
insert into Seat (id, student) values ('1', 'Abbot');
insert into Seat (id, student) values ('2', 'Doris');
insert into Seat (id, student) values ('3', 'Emerson');
insert into Seat (id, student) values ('4', 'Green');
insert into Seat (id, student) values ('5', 'Jeames');
# 编写解决方案来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。
交换每两个连续的学生的座位号,如果学生的数量是奇数,则最后一个学生的id不交换;
输入:
输出:
二、分析
三、实现
select
case
when id%2 = 1 and id = (select max(id) from seat) then id
when id%2 = 1 then id +1
else id - 1
end id,
student
from seat
order by id;
when id%2 = 1 and id = (select max(id) from seat) then id 如果学生数量对2求余为1,则学生数量为奇数,id最大的学生不交换位置。 when id%2 = 1 then id +1 else id - 1 end id, 上面条件给出最大id不交换,则其余的学生id若余1,则输出比他大的一个id来交换为id+1,其余情况为余0则输出id-1。
四、总结
使用case when ... then ... 进行条件筛选输出,最后order by对换过座位的学生进行升序排序;