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;

结果展示:

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐