SQL练习笔记二:换座位

网优小兵玩Python

共 745字,需浏览 2分钟

 ·

2020-12-20 17:26

点击上方蓝字关注「网优小兵玩Python

  


题目:小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。其中纵列的id是连续递增的小美想改变相邻俩学生的座位。

注意:如果学生人数是奇数,则不需要改变最后一个同学的座位。

-- 创建seat表CREATE TABLE seat(  id int(4) not NULL,  student VARCHAR(10) not NULL);
-- 插入数据INSERT INTO seat VALUE(1,'Abbot');INSERT INTO seat VALUE(2,'Doris');INSERT INTO seat VALUE(3,'Emerson');INSERT INTO seat VALUE(4,'Green');INSERT INTO seat VALUE(5,'Jeames');

-- 解法1:使用UNION凭借查询结果SELECT  * FROM  (-- id为偶数则id-1 --  SELECT    id - 1 AS id,    student   FROM    seat   WHERE    id % 2 = 0 UNION ALL  SELECT-- id为非最大奇数则id加1 --    id + 1 AS id,    student   FROM    seat   WHERE    id % 2 <> 0     AND id <(    SELECT      max( id )     FROM      seat     ) UNION ALL  SELECT -- 查找最后一个id,且为奇数 --    *   FROM    seat   WHERE    id =(    SELECT      max( id )     FROM      seat     )     AND id % 2 <> 0   ) AS temp ORDER BY  id;
-- 解法2:使用CASE条件分支判断查询SELECT  (  CASE       WHEN id%2= 1 AND id != ( SELECT MAX( id ) FROM seat ) THEN id + 1       WHEN id%2= 0 THEN  id - 1       ELSE id       END   ) AS id,  student FROM  seat ORDER BY  id;

两种查询语句查询结果如下:

总结:本题的知识点就是CASE条件分支,在不知道CASE之前,我使用了最笨的一种方法,分别查询出奇数、偶数及最后一位的id再对id值进行调整(奇数加1,偶数减1,最后一id值位不变),最后再将查询结果进行UNION拼接并ORDER BY升序排序,语句过于繁琐冗长,其意思跟使用解法2中的CASE条件分支查询一样。


网优苦短,我用Python





网优小工具传送门


自动扩容

4G网优规划工具

同向最小站间距

4/5G新开站脚本制作

号码归属地查询

站间距计算工具

图片相似度核查工具

载频配置统计工具

活动保障

浏览 41
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报