高频 SQL 50 题(基础版)| 626. 换座位

表: Seat

±------------±--------+

| Column Name | 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 |

±---±--------+

解释:

请注意,如果学生人数为奇数,则不需要更换最后一名学生的座位。

解题思路:

使用判断奇偶;偶数保持不变,奇数+2,然后将得出的id值进行升序排序,再将id重新编号

/**

1 % 2 != 0 id = 3

2 % 2 = 0 id = 2

3 % 2 != 0 id = 5

4 % 2 = 0 id = 4

5 % 2 != 0 id = 7

**/

sql 复制代码
SELECT @id:=@id + 1 AS id,student FROM seat,(SELECT @id:= 0) as val ORDER BY CASE WHEN id % 2 = 0 THEN id ELSE id + 2 END;

使用开窗函数和if优化

c 复制代码
SELECT row_number() over(ORDER BY if( id % 2 = 0 ,id, id + 2)) AS id, student 
FROM seat

作者:🙃

链接:https://leetcode.cn/problems/exchange-seats/solutions/2921197/shi-yong-case-whenwan-cheng-by-nob2u9cvl-ncaj/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐
Sunyanhui15 小时前
牛客网 SQL36查找后排序
数据库·sql·mysql
Mitch3117 小时前
【漏洞复现】CVE-2021-45788 SQL Injection
sql·web安全·docker·prometheus·metersphere
网络安全King7 小时前
网络安全 - SQL Injection
sql·web安全·php
Stanford_11069 小时前
高级的SQL查询技巧有哪些?
sql·微信小程序·twitter·微信开放平台
wlyang66611 小时前
1. SQL常见笔试题目
数据库·sql
smilejingwei11 小时前
SQL,生成指定时间间隔内的事件次序号
数据库·sql·spl·esprocspl
张伯毅13 小时前
Flink SQL 支持 kafka 开启 kerberos 权限控制.
sql·flink·kafka
向阳121813 小时前
mybatis 动态 SQL
数据库·sql·mybatis
小黄人软件13 小时前
20241220流水的日报 mysql的between可以用于字符串 sql 所有老日期的,保留最新日期
数据库·sql·mysql
青莳吖13 小时前
Java通过Map实现与SQL中的group by相同的逻辑
java·开发语言·sql