leetcode-sql-626. 换座位 order by if
626. 换座位
表: Seat
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| name | varchar |
+-------------+---------+
Id是该表的主键列。
该表的每一行都表示学生的姓名和ID。
Id是一个连续的增量。
编写SQL查询来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的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 |
+----+---------+
ordery by if()的用法:if里面第一个判断条件中的字段作为第一个排序条件,后面是第二个排序条件,最终排序输出时,先根据第一个条件排序,然后再根据第二个条件排序
order by if(id%2=0,id-1,id+1),一级排序依据id,二级排序依据id'为当前id-1或id+1
- 如果id为奇数,二级排序依据为当前id' = id+1。假如id=1,则排序依据为id' = 2,
- 如果id为偶数,二级排序依据为当前id' = id-1。假如id=2,则排序依据为id' = 1.
- 最终:一级排序依据id是12345,二级排序依据id'是21435,然后再根据id'升序排列开窗输出答案
select rank() over(order by if(id % 2 = 0 , id - 1 , id + 1)) 'id',student from seat
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律