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

本文介绍了如何使用SQL查询,结合CASEWHEN和位运算符(异或),以及COALESCE函数,对给定的Seat表中的学生座位进行调整,保证奇数学生ID不交换并保持升序。高级版本利用左连接和位异或操作实现高效处理。
摘要由CSDN通过智能技术生成

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() 函数为最后一行记录生成正确的输出。

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值