techiall / Blog

🍋 [My Blog] See discussions
https://github.com/techiall/Blog/discussions
MIT License
8 stars 1 forks source link

Leetcode | 换座位 #16

Open techiall opened 6 years ago

techiall commented 6 years ago

小美是一所中学的信息科技老师,她有一张 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  |
+---------+---------+

注意:

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

mysql

sql 里面有 if 函数,if 的使用方法如下,和 编程语言的 if...else... 差不多。

if(expr1, expr2, expr3),当 exp1 的值为 true 时,运行的 exp2,否则运行 exp3。

这题就逻辑题,用伪代码表达如下。

id = function(id) {
    if (id % 2 == 1) { // 如果 id 不是 2 的倍数,也就是奇数
        if (id == count(*)) { // 如果是最后一行, 就还是自己
            return id;
        } else { // 第一个条件满足,第二个不满足时和下一个交换
            return id + 1;
        }
    } else { // id 为偶数,和上一个交换
        return id - 1;
    }

};

以下为提交代码

select if (id % 2 = 1, if (id = (select count(*) from seat), id, id + 1), id - 1) id, student 

from seat order by id;