力扣626(MySQL)-换座位(中等)

发布时间 2023-04-06 10:23:37作者: 我不想一直当菜鸟

题目:

表: Seat

编写SQL查询来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。

按 id 升序 返回结果表。

查询结果格式如下所示。

示例1:

 

解释:

请注意,如果学生人数为奇数,则不需要更换最后一名学生的座位。

解题思路:

①交换座位号是交换相邻同学的id,如果原来座位号id是奇数,换座位后id就是偶数,如果原来座位号id是偶数,换座位后id就是奇数;

②利用count(*)计算出一共有多少个学生,利用SQL中求余函数mod(n,m),返回n除以m的余数,以此来判断座位id是奇数还是偶数,如果id是奇数且id != count,那么就将id+1;如果id是奇数且id = count,那么id就是最后一个奇数不能交换,id不变;其他情况:id为偶数,那么id - 1;

③对结果进行id 升序排序。

 1 select 
 2      (case 
 3      when mod(id, 2) = 1 and id != cout then id + 1
 4      when mod(id, 2) = 1 and id  = cout then id
 5      else id - 1 end) as id,student
 6 from 
 7     seat_626,
 8         (
 9      select count(*) as cout
10      from seat_626
11     ) as temp
12 order by id;