【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
相关推荐
影子24012 小时前
Navicat导出mysql数据库表结构说明到excel、word,单表导出方式记录
数据库·mysql·excel
开发小能手-roy7 小时前
ubuntu 安装mysql
mysql·ubuntu·adb
是阿建吖!8 小时前
【MySQL】事务
数据库·mysql
热爱编程的小曾9 小时前
sqli-labs靶场 less5
sql
Asuka079 小时前
MySQL数据库和表的操作
数据库·mysql
喻师傅9 小时前
横扫SQL面试——用户留存率问题
数据库·sql·面试
暗恋 懒羊羊9 小时前
【MySQL】表的操作
数据库·mysql
likfishdn10 小时前
SQL注入零基础学习二MYSQL手工注入
数据库·sql·学习
弈风千秋万古愁13 小时前
python 语法篇(一)
数据库·python·mysql
苏琢玉13 小时前
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
mysql·shell