SQL-每日一题【626.换座位】

题目

表: Seat

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

按 id 升序 返回结果表。

查询结果格式如下所示。

示例 1:

解题思路

前置知识

MySQL 的 MOD() 函数是取模运算的函数,它返回两个数相除的余数。其语法如下:

sql 复制代码
MOD(dividend, divisor)

其中,dividend 和 divisor 都是数值表达式,dividend 除以 divisor 并返回余数。

注意,如果除数为 0,则 MOD() 函数返回 NULL,而不会引发错误。

让我们一起来看一下这道题吧!

1.题目要求我们交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。对于这个问题我们用case when 来解决。

2.首先我们用mod()找出为奇数的 id,并判断此 id 是否为最后一个,也就是用 count(*)计算出所有数据的个数,并与找出的 id 进行比较,若是最后一个则让它返回 id,不对其进行交换,若不是最后一个,则让id = id + 1。如果均不满足上述条件,那说明 id 为偶数,使 id = id -1,最后按id的升序降序排序即可。

代码实现

sql 复制代码
select (case
            when mod(id,2) = 1 and id = (select count(*)from seat) then id
            when mod(id,2) then id + 1
            else id - 1
            end) as id, student
from seat
order by id

测试结果

相关推荐
杭州杭州杭州7 分钟前
MySQL超全笔记
数据库·笔记·mysql
OpenVINO生态社区2 小时前
【汽车功能安全:软件与硬件缺一不可】
数据库·安全·汽车
字节王德发2 小时前
如何在Springboot的Mapper中轻松添加新的SQL语句呀?
spring boot·后端·sql
程序猿阿伟3 小时前
《打破SQL与AI框架对接壁垒,解锁融合新路径》
数据库·人工智能·sql
点燃大海3 小时前
MySQL表结构导出(Excel)
java·数据库·python·mysql·spring
꧁坚持很酷꧂3 小时前
Qt远程连接数据库,注册,登录
开发语言·数据库·qt
加油,旭杏4 小时前
【Redis】服务端高并发分布式结构
数据库·redis·分布式
꧁༺朝花夕逝༻꧂4 小时前
MySQL--数据备份
数据库·mysql
共享家95276 小时前
Linux常用命令详解:从基础到进阶
linux·服务器·数据库
我是个假程序员10 小时前
sql server数据库可疑修复
数据库