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        
                

posted on 2022-10-01 20:20  老菜农  阅读(30)  评论(0编辑  收藏  举报

导航