【力扣sql】高频 SQL 50 题(基础版)

626

交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。按 id 升序 返回结果表。

表: Seat

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| student     | varchar |
+-------------+---------+
普通版:case when
select (
    case    when id%2 = 1 and id = (select count(*) from seat) then id
            when id%2 = 1 then id+1
            else id-1   end) id, student
from seat
order by id;
高级版:位运算  coalesce()
select s1.id id, coalesce(s2.student, s1.student) student
from seat s1 left join seat s2 on (s1.id + 1)^1-1 = s2.id
order by s1.id

位运算:^(位异或)

              将两数采用二进制进行运算,相同为0,相异为1

coalesce函数:coalesce(value1, value2, ..., valueN)

              可以有多个备选值,返回备选值中第一个非空值;

              若所有的表达式都是空值,最终将返回一个空值。

此处使用 coalesce() 函数为最后一行记录生成正确的输出。

你可能感兴趣的:(leetcode,sql,数据库)