626. 换座位
小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。
其中纵列的 id 是连续递增的
小美想改变相邻俩学生的座位。
你能不能帮她写一个 SQL query 来输出小美想要的结果呢?
示例:
假如数据输入的是上表,则输出结果如下:
注意:如果学生人数是奇数,则不需要改变最后一个同学的座位。
解答:
SELECT (CASE
# 当座位号是奇数并且不是不是最后一个座位号时
WHEN MOD(id,2)!=0 AND id!=counts THEN id+1
# 当座位号是奇数并且是最后一个座位号时,座位号不变
WHEN MOD(id,2)!=0 AND id=counts THEN id
# 当座位号是偶数时
ELSE id-1 END) AS id,student
FROM seat, (SELECT COUNT(*) AS counts FROM seat) AS b ORDER BY id ASC
但下面这种思路一样,但判断奇数偶数的顺序不一样,却在Leetcode提交错误。
SELECT (CASE
WHEN MOD(id,2)=0 AND id!=counts THEN id-1
WHEN MOD(id,2)!=0 AND id!=counts THEN id+1
ELSE id END) AS id,student
FROM seat, (SELECT COUNT(*) AS counts FROM seat) AS b
ORDER BY id ASC