[Mysql] MOD函数

MOD函数用于返回N除以M后的余数

语法结构

MOD(N, M)

-- 0
SELECT MOD(27,3);
-- 1
SELECT MOD(28,3);
-- 2
SELECT MOD(29,3);
-- 0.5
SELECT MOD(15.5,3);

MOD函数求余数也可以用%替代

-- 0
SELECT 27 % 3;
-- 1
SELECT 28 % 3;
-- 2
SELECT 29 % 3;
-- 0.5
SELECT 15.5 % 3;

MOD函数常用来判断奇偶

例如

MOD(id,2) = 1      id是奇数

MOD(id,2) = 0      id是偶数 

练习案例:奇偶互换位置

数据导入 

DROP TABLE IF EXISTS student_info; 
CREATE TABLE student_info( 
student_id INT(8), 
student_name VARCHAR(8) 
) 
ENGINE = InnoDB 
DEFAULT CHARSET = utf8; 
INSERT INTO 
student_info (student_id,student_name) 
VALUE (1,'李明') 
,(2,'王猛') 
,(3,'吴丽丽') 
,(4,'张飞') 
,(5,'赵涛');

student_info表(学生信息表)

问题:将奇数学号和偶数学号的相邻学生调换学号。若最后一个是奇数学号,则该学号不参与调换,最终结果按照最新学号升序排列(输出内容:student_id,student_name)

解题思路:使用MOD函数将学号除以2,然后通过余数判断学号的奇偶性,并结合CASE WHEN语句,当学号为奇数时,将当前学号加1得到该学生的新学号;当学号为偶数时,将当前学号减1得到该学生的新学号。需要考虑的特殊情况是,当前学号为数据条数且为奇数时,不对学号进行操作,只需按照学号升序排列即可

SELECT(CASE WHEN mod(student_id,2) = 1 AND student_id = (SELECT COUNT(*) FROM student_info) THEN student_id 
            WHEN mod(student_id,2) = 1 THEN student_id + 1 
            ELSE student_id - 1 
       END)AS student_id,student_name 
FROM student_info 
ORDER BY student_id;

结果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值