力扣626(MySQL)-换座位(中等)
题目:
表: 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;