【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
相关推荐
羊小蜜.22 分钟前
Mysql 07: 正则表达式查询(REGEXP)全解
数据库·mysql·正则表达式
Dxy123931021623 分钟前
正则表达式如何匹配提取文章日期
数据库·mysql·正则表达式
元宝骑士24 分钟前
MySQL联表查询优化实战:小表驱动大表的联合索引设计
后端·mysql
前进的李工1 小时前
MySQL用户管理与权限控制指南(含底层架构说明)
开发语言·数据库·sql·mysql·架构
一直都在5721 小时前
MySQL索引优化
android·数据库·mysql
脑子加油站2 小时前
MySQL8数据库高级特性
数据库·mysql
zly35002 小时前
centos7 mysql 无法被远程连接
数据库·mysql
廿一夏2 小时前
MySql的增删改查
数据库·mysql·dba
瀚高PG实验室2 小时前
HGDB 4.5.8.8开启oracle兼容执行带聚合函数的SQL导致数据库进程被信号11杀死
数据库·sql·oracle·瀚高数据库
神の愛3 小时前
本地连接MySql数据库报错??
数据库·mysql