LeetCode-626. 换座位( 626. Exchange Seats)。知识点:case when then else end

小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。

其中纵列的 id 是连续递增的

小美想改变相邻俩学生的座位。

你能不能帮她写一个 SQL query 来输出小美想要的结果呢?

示例:

+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Abbot   |
|    2    | Doris   |
|    3    | Emerson |
|    4    | Green   |
|    5    | Jeames  |
+---------+---------+
假如数据输入的是上表,则输出结果如下:

+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Doris   |
|    2    | Abbot   |
|    3    | Green   |
|    4    | Emerson |
|    5    | Jeames  |
+---------+---------+
注意:

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

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/exchange-seats

审题:改变id相邻的两个学生的名字,12,34。如果id是奇数,则最后一个不变。

思考:这是一个查询题目,需要生成新的结果。将students的名字调换。

解题:第一种方法,出去奇数最后一位,直接改变id的奇偶。然后再按照id排序。

SELECT
    (CASE
##如果id初二不等于0,说明是奇数,并且不是最后一个,id+1;
        WHEN MOD(id, 2) != 0 AND counts != id THEN id + 1
##如果是最后一个奇数,那就id不变
        WHEN MOD(id, 2) != 0 AND counts = id THEN id
##其他的都是偶数,减一。
        ELSE id - 1
    END) AS id,
    student
FROM
    seat,
##一共有多少条数据
    (SELECT
        COUNT(*) AS counts
    FROM
        seat) AS seat_counts
ORDER BY id ASC;

case函数用法:

CASE sex
         WHEN '1' THEN '男'
         WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
         WHEN sex = '2' THEN '女'
ELSE '其他' END

第二种方法:

SELECT
    s1.id, COALESCE(s2.student, s1.student) AS student
FROM
    seat s1
        LEFT JOIN
    seat s2 ON ((s1.id + 1) ^ 1) - 1 = s2.id
ORDER BY s1.id;

COALESCE() 函数   将空值替换成其他值,返回第一个非空值

发布了84 篇原创文章 · 获赞 2 · 访问量 2665

猜你喜欢

转载自blog.csdn.net/Hello_JavaScript/article/details/100574645