【SQL】换座位

目录

题目

分析

代码


题目

表: Seat

复制代码
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| student     | varchar |
+-------------+---------+
id 是该表的主键(唯一值)列。
该表的每一行都表示学生的姓名和 ID。
ID 序列始终从 1 开始并连续增加。

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

id 升序 返回结果表。

查询结果格式如下所示。

示例 1:

复制代码
输入: 
Seat 表:
+----+---------+
| id | student |
+----+---------+
| 1  | Abbot   |
| 2  | Doris   |
| 3  | Emerson |
| 4  | Green   |
| 5  | Jeames  |
+----+---------+
输出: 
+----+---------+
| id | student |
+----+---------+
| 1  | Doris   |
| 2  | Abbot   |
| 3  | Green   |
| 4  | Emerson |
| 5  | Jeames  |
+----+---------+
解释:
请注意,如果学生人数为奇数,则不需要更换最后一名学生的座位。

分析

编写解决方案来交换每两个连续的学生的座位号。

交换的基本思路:一个增,一个减

这里两个连续的学生换位,即偶数位减一,奇数位加一,不必使用case when等,通过简单的if可以实现

if(id%2=0,id-1,id+1)

如果学生的数量是奇数,则最后一个学生的id不交换。

注意到,前面仅适用于学生总数是偶数的情况,如果学生数量是奇数,最后一位同学座位不变

可以再次通过if,使得最后一位同学id不变,if(id=(select count(*) from Seat), id, id+1)

代码

复制代码
select if(id%2=0,id-1,if(id=(select count(*) from Seat), id, id+1)) id, student
from Seat
order by id
相关推荐
香气袭人知骤暖1 小时前
SQL慢查询常见优化步骤
android·数据库·sql
Star Learning Python1 小时前
MySQL日期时间的处理函数
数据库·sql
清风拂山岗 明月照大江2 小时前
MySQL运维
运维·数据库·mysql
进击的CJR2 小时前
redis哨兵实现主从自动切换
mysql·ffmpeg·dba
crossaspeed2 小时前
MySql三大日志——(八股)
数据库·mysql
醇氧5 小时前
SqlLogInterceptor mybatis配置打印SQL
java·sql·mybatis
墨香幽梦客5 小时前
数据库选型对比:MySQL、Oracle与PostgreSQL的企业应用场景分析
数据库·mysql·oracle
清风拂山岗 明月照大江6 小时前
MySQL进阶
数据库·sql·mysql
YIN_尹6 小时前
【MySQL】表的约束(上)
android·数据库·mysql
云和数据.ChenGuang6 小时前
运维故障之MySQL 连接授权错误
运维·数据库·人工智能·mysql