微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[Swift]LeetCode626. 换座位 | Exchange Seats

SQL架构

1 Create table If Not Exists seat(id int,student varchar(255))
2 Truncate table seat
3 insert into seat (id,student) values (1,Abbot)
4 insert into seat (id,student) values (2,Doris)
5 insert into seat (id,student) values (3,Emerson)
6 insert into seat (id,student) values (4,Green)
7 insert into seat (id,student) values (5,Jeames)

Mary is a teacher in a middle school and she has a table seat storing students‘ names and their corresponding seat ids.

The column id is continuous increment. 

Mary wants to change seats for the adjacent students. 

Can you write a sql query to output the result for Mary? 

+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Abbot   |
|    2    | Doris   |
|    3    | Emerson |
|    4    | Green   |
|    5    | Jeames  |
+---------+---------+

For the sample input,the output is: 

+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Doris   |
|    2    | Abbot   |
|    3    | Green   |
|    4    | Emerson |
|    5    | Jeames  |
+---------+---------+

Note:
If the number of students is odd,there is no need to change the last one‘s seat.

小美是一所中学的信息科技老师,她有一张 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  |
+---------+---------+

注意:

如果学生人数是奇数,则不需要改变最后一个同学的座位。

Runtime: 152 ms

 1 # Write your MysqL query statement below
 2 select 
 3     (case when id % 2 = 0 then id - 1
 4         when id % 2 = 1 and id <> c.cnt then id + 1
 5         else id
 6      end) as id,student
 7 from 
 8     seat, 9     (select count(id) as cnt from seat) as c
10 order by id

253ms

 1 # Write your MysqL query statement below
 2 SELECT 
 3     (CASE
 4         WHEN MOD(id,2) != 0 AND counts != id THEN id + 1
 5         WHEN MOD(id,2) != 0 AND counts = id THEN id
 6         ELSE id - 1
 7     END) as id, 8     student
 9 FROM 
10     seat,11     (SELECT COUNT(*) as counts
12     FROM seat) as seat_counts
13 ORDER BY id ASC;

255ms

1 # Write your MysqL query statement below
2 select * from (
3 select case when b.Id is null then a.Id else b.Id end as Id,a.student from seat a left join seat b on a.Id+1=b.Id where mod(a.id,2)=1
4 union 
5 select b.Id,a.student from seat a left join seat b on a.Id-1=b.Id where mod(a.id,2)=0
6 ) a order by a.id

257ms

1 select
2     case
3         when id%2=1 and id=(select max(id) from seat) then id
4         when id%2=1 then id+1
5         else id-1 end as id,6     student
7 FROM seat
8 order by id

258ms

1 # Write your MysqL query statement below
2 select case 
3     when mod(id,2) =1 and id = (select max(id) as sid from seat)  then id  
4     when mod(id,2) =1 then id+1 
5     else id-1 end as id,student
6 from seat
7 order by id

260ms

1 SELECT
2     (CASE WHEN id%2=0 THEN id-1 
3      WHEN id%2=1 AND id<(select max(id) FROM seat) THEN id+1 
4     ELSE id
5     END) as id
6 ,student
7 FROM seat
8 ORDER BY id;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐