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