本文主要是介绍[SQL] LeetCode 626. 换座位 - [Medium],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
626. 换座位
题目:
小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。
其中纵列的 id 是连续递增的
小美想改变相邻俩学生的座位。
你能不能帮她写一个 SQL query 来输出小美想要的结果呢?
示例:
+---------+---------+
| id | student |
+---------+---------+
| 1 | Abbot |
| 2 | Doris |
| 3 | Emerson |
| 4 | Green |
| 5 | Jeames |
+---------+---------+
假如数据输入的是上表,则输出结果如下:
+---------+---------+
| id | student |
+---------+---------+
| 1 | Doris |
| 2 | Abbot |
| 3 | Green |
| 4 | Emerson |
| 5 | Jeames |
+---------+---------+
注意:
如果学生人数是奇数,则不需要改变最后一个同学的座位。
SQL架构:
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');
解题语句:
方法一:CASE 函数
思路:
- 更改 id 值的方式实现交换
- id 为偶数时,偶数 id = id - 1
- id 为奇数时(最后一个id为奇数时),最后一个 id 值不变
- id 为奇数时(最后一个id为偶数时),奇数 id = id + 1
- id 重新排序,完成交换
SELECT
CASE WHEN id % 2 = 0 THEN id - 1
WHEN id % 2 = 1 AND id = ( SELECT COUNT( * ) FROM seat ) THEN id
ELSE id + 1 END AS id, student
FROM seat
ORDER BY id;
方法二:IF 函数
思路:
- 将最后一项 id 单独考虑
- 除去最后一个 id,偶数 id - 1,奇数 id + 1
- 对于最后一个 id:偶数 id - 1,奇数 id 不变
SELECT
IF(id < ( SELECT count( * ) FROM seat ),IF( id % 2 = 0, id - 1, id + 1 ),IF( id % 2 = 0, id - 1, id ) ) AS id, student
FROM seat
ORDER BY id;
这篇关于[SQL] LeetCode 626. 换座位 - [Medium]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!