You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Leetcode SQL题Exchange Seats指定条件作用及简化代码正确性问询

问题背景

seat表结构

Column NameType
idint
namevarchar

id是该表的主键,为连续自增字段,表中每一行记录一名学生的ID和姓名,本次需求为交换相邻奇偶序号学生的座位。

现有两段SQL实现,需要解答对应问题:

第一段SQL代码

select
(CASE when (select max(id) from seat)%2 = 1 and id = (select max(id) from seat) then id
when id%2 = 1 then id+1
else id -1
end) as id,student
from seat
order by id

第二段简化SQL代码

select
(CASE when (select max(id) from seat)%2 = 1 then id
when id%2 = 1 then id+1
else id -1
end) as id,student
from seat
order by id

问题解答

1. id = (select max(id) from seat)条件的作用

这个条件是用来处理总学生数为奇数的边界场景:
如果总学生数为奇数,最大的id值必然也是奇数,此时排在最后的学生没有相邻的下一位可以配对交换,所以需要保留他的原id不变。这个条件和前面的(select max(id) from seat)%2 = 1组合后,就精准限定了只有「总人数为奇数,且当前是最后一名学生」的特殊情况才保留原id,其他所有学生都正常走交换逻辑。

2. 第二段简化SQL无法满足需求

简化后的SQL逻辑存在严重错误:它去掉了id = (select max(id) from seat)的限定,只要总人数为奇数,第一个CASE分支就会对所有学生生效,直接返回原id,完全不会执行后续的交换逻辑。
举个实际场景验证:假设表内共有5名学生(id为1~5,总人数为奇数):

  • 第一段SQL执行后:id1变2、id2变1、id3变4、id4变3、id5保持5,排序后就是正确的交换结果
  • 第二段SQL执行后:所有学生的id都保持原值,相当于完全没有做交换,自然不符合需求。

内容的提问来源于stack exchange,提问作者Ashima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:24:07