MySQL基础练习题11-换座位

题目:交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。按 id 升序 返回结果表。

准备数据

分析数据

方法一:利用power函数对id进行交换,得出的答案只有0或1

第一步:用power()函数将id号交换

第二步:按照交换后的顺序进行排序

方法二:利用if函数嵌套判断奇偶


题目:交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。按 id 升序 返回结果表。

准备数据

## 创建库
create database db;
use db;

## 创建表(seat)
Create table If Not Exists Seat (id int, student varchar(255));

## 向表里插入数据
Truncate table Seat;
insert into Seat (id, student) values ('1', 'Abbot');
insert into Seat (id, student) values ('2', 'Doris');
insert into Seat (id, student) values ('3', 'Emerson');
insert into Seat (id, student) values ('4', 'Green');
insert into Seat (id, student) values ('5', 'Jeames');

 分析数据

  • 如果学生人数为偶数,则交换两个连续的学生的座位号。即1号与2号交换,3号与4号交换。

  • 如果学生人数为奇数,最后一名学生不需要交换座位,但是前边的连续座位号交换。

方法一:利用power函数对id进行交换,得出的答案只有0或1。

第一步:用power()函数将id号交换
## 第一步:POWER(number,power)-POWER(底数,指数)
select id + 1 - 2 * power(0,id%2) from seat; 

说明:POWER(number,power)-POWER(底数,指数)

idid%2power(0,id%2)
id + 1 - 2 * power(0,id%2)
11%2=10^1=01+1-2*02
22%2=00^0=12+1-2*11
33%2=10^1=03+1-2*04
44%2=00^0=14+1-2*13
55%2=10^1=05+1-2*06
第二步:按照交换后的顺序进行排序
## 第二步:根据第一步得出的顺序进行排序
select
    row_number() over(order by (id + 1 - 2 * power(0,id%2))) as id,
    student
from
    seat;

方法二:利用if函数嵌套判断奇偶。

select
    #若id为偶数,则id减一,若id为奇数,则id加一
    if(id % 2 = 0, id - 1,
        #如果id为该表的最后一个id且为奇数,则id不加一
        if(id = (select count(id) from seat), id, id + 1)
    ) as id, student
from seat
order by id;

--什么牛不会吃草?

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值