前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL练习笔记二:换座位

SQL练习笔记二:换座位

作者头像
用户6184845
发布2021-01-04 12:50:49
6190
发布2021-01-04 12:50:49
举报

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

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

代码语言:javascript
复制
-- 创建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');
代码语言:javascript
复制
-- 解法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;
代码语言:javascript
复制
-- 解法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条件分支查询一样。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网优小兵玩Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档