【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
相关推荐
benyuanone42 分钟前
MySQL环境项目迁移成国产化达梦环境
数据库·mysql
尽兴-1 小时前
MySQL索引优化:从理论到实战
数据库·mysql·优化·b+树·索引·最左前缀
Davina_yu2 小时前
2026年节假日表SQL
数据库·sql
天码-行空3 小时前
Linux 系统 MySQL 8.0 详细安装教程
linux·运维·mysql
码农小卡拉3 小时前
数据库:主键 VS 唯一索引 区别详解
java·数据库·sql
廋到被风吹走3 小时前
【数据库】【MySQL】锁机制深度解析:从原理到死锁分析实战
数据库·mysql
航Hang*4 小时前
第3章:复习篇——第1节:创建和管理数据库---题库
数据库·笔记·sql·学习·期末·复习
闲人不梦卿5 小时前
数据库安全和事务以及sql
数据库·sql
阿坤带你走近大数据5 小时前
oracle的varchar2(200)和mysql的varchar(200) 最大支持的字节数和字符数都一样吗
数据库·mysql·oracle
小蜗的房子5 小时前
Oracle 19C RAC Public IP单网卡改为bond模式操作指南
运维·网络·数据库·sql·tcp/ip·oracle·oracle rac