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

测试结果

相关推荐
哆啦A梦158821 小时前
Springboot整合MyBatis实现数据库操作
数据库·spring boot·mybatis
Zzzzmo_21 小时前
【MySQL】JDBC(含settings.xml文件配置/配置国内镜像以及pom.xml文件修改)
数据库·mysql
FirstFrost --sy1 天前
MySQL内置函数
数据库·mysql
2401_879693871 天前
将Python Web应用部署到服务器(Docker + Nginx)
jvm·数据库·python
reembarkation1 天前
光标在a-select,鼠标已经移出,下拉框跟随页面滚动
java·数据库·sql
eggwyw1 天前
MySQL-练习-数据汇总-CASE WHEN
数据库·mysql
星轨zb1 天前
通过实际demo掌握SpringSecurity+MP中的基本框架搭建
数据库·spring boot·spring security·mp
treacle田1 天前
达梦数据库-配置本地守护进程dmwatcher服务-记录总结
数据库·达梦数据库·达梦数据库local数据守护
wyt5314291 天前
Redis的安装教程(Windows+Linux)【超详细】
linux·数据库·redis
CeshirenTester1 天前
从数据库到结构化用例:一套可落地的测试智能体架构
数据库·架构