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   老菜农  阅读(36)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

统计信息

点击右上角即可分享
微信分享提示