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;
结果展示: