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

测试结果

相关推荐
isNotNullX18 分钟前
一文解读OLAP的工具和应用软件
大数据·数据库·etl
小诸葛的博客2 小时前
pg入门1——使用容器启动一个pg
数据库
大熊程序猿3 小时前
python 读取excel数据存储到mysql
数据库·python·mysql
落落落sss3 小时前
sharding-jdbc分库分表
android·java·开发语言·数据库·servlet·oracle
jnrjian3 小时前
Oracle 启动动态采样 自适应执行计划
数据库·oracle
知识分享小能手3 小时前
mysql学习教程,从入门到精通,SQL DISTINCT 子句 (16)
大数据·开发语言·sql·学习·mysql·数据分析·数据库开发
lamb张3 小时前
MySQL锁
数据库·mysql
ForRunner1234 小时前
使用 Python 高分解决 reCAPTCHA v3 的指南
数据库·python·microsoft
躺平的花卷4 小时前
Python爬虫案例六:抓取某个地区某月份天气数据并保存到mysql数据库中
数据库·爬虫·python·mysql