今天一个朋友发来这样一道题。这是他面试时的其中一道是当时考虑了很久也没完成最后不得不放弃。那我们就来看一下题目描述如下必须要求用sql完成表: Seat----------------------|ColumnName|Type|----------------------|id|int||student|varchar|----------------------id 是该表的主键唯一值列。该表的每一行都表示学生的姓名和 ID。ID 序列始终从 1 开始并连续增加。编写解决方案来交换每两个连续的学生的座位号。如果学生的数量是奇数则最后一个学生的id不交换。按 id 升序 返回结果表。查询结果格式如下所示。示例 1:输入: Seat 表:-------------|id|student|-------------|1|Abbot||2|Doris||3|Emerson||4|Green||5|Jeames|-------------输出:-------------|id|student|-------------|1|Doris||2|Abbot||3|Green||4|Emerson||5|Jeames|-------------解释: 请注意如果学生人数为奇数则不需要更换最后一名学生的座位。看到这个题当时的思路是根据 ID 的奇偶性调整学生对应的 ID奇数 ID 与下一个偶数 ID 交换最后一个奇数 ID 保持不变且结果按 ID 升序返回。核心思路1、判断 ID 奇偶性偶数 ID交换后对应 ID-1奇数 ID若不是最后一个 ID交换后对应 ID1若是最后一个 ID保持不变。2、关联原表通过调整后的 ID 关联原表获取交换后的学生姓名最终按原 ID 升序返回。完整 SQL 实现SELECTt.id,-- 根据调整后的 target_id 匹配原表的学生姓名(SELECTs.studentFROMSeat sWHEREs.idt.target_id)ASstudentFROM(-- 第一步生成每个 ID 对应的目标交换 IDSELECTid,CASE-- 偶数 ID交换到前一个 IDWHENMOD(id,2)0THENid-1-- 奇数 ID如果是最后一个 ID 则不变否则交换到后一个 IDWHENid(SELECTMAX(id)FROMSeat)THENidELSEid1ENDAStarget_idFROMSeat)t-- 按原 ID 升序返回ORDERBYt.id;后来我也上网查了下发现了一个更牛逼的思路分享给大家他的思路是将偶数 id 减 2 后重排即可核心代码如下MYSQL:select rank() over(order by if(id % 2 0,id-2,id)) as id ,student from seat这思路确实惊为天人不知道你看到有更好的思路欢迎分享
OpenAI-testing-agent-demo API深度解析:掌握Socket.IO通信与CUA模型调用 【免费下载链接】openai-testing-agent-demo Demo of a UI testing agent using the OpenAI CUA model and the Responses API. 项目地址: https://gitcode.com/gh_mirrors/op/openai-test…
iOS设备支持终极解决方案:快速解决Xcode兼容性问题的完整指南 【免费下载链接】iOSDeviceSupport All versions of iOS Device Support 项目地址: https://gitcode.com/gh_mirrors/ios/iOSDeviceSupport
你是否曾经遇到过这样的困境:当你连接一台…
1. WSL简介与安装准备 Windows Subsystem for Linux(WSL)是微软在Windows 10/11上原生运行的Linux兼容层。它允许开发者直接在Windows系统中运行Linux环境,无需传统虚拟机或双启动配置。与虚拟机相比,WSL具有以下显著优势…
1. Windows Server 2022网卡驱动配置概述 在服务器环境中,网卡驱动的正确安装与配置是确保网络性能稳定和功能完整的基础环节。Windows Server 2022作为微软最新的服务器操作系统,其对硬件驱动的支持策略与桌面版Windows有显著差异——系统默认可能不包含…
更多请点击:
https://intelliparadigm.com
第一章:Cursor终端插件生态避坑指南概览 Cursor 作为基于 VS Code 内核构建的 AI 原生编辑器,其终端插件生态虽活跃,但存在兼容性断层、权限策略突变与调试链路断裂等典型风险。开发者常…