持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情
leetcode刷题626-换座位
前文
本文内容为leetcode数据库类型的刷题,题目主要考察数据库操作中对于数据的查询操作。查询中需要对结果进行二次处理,变更实际的查询结果。本题目的题目序号为626,题目链接为leetcode.cn/problems/ex…
题目内容
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| name | varchar |
+-------------+---------+
Id是该表的主键列。 该表的每一行都表示学生的姓名和ID。 Id是一个连续的增量。 编写SQL查询来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。
按 id 升序 返回结果表。
题目分析
根据题目的要求,我们需要通过已知的学生表获取每个学生id以及名字,但我们获取的id不能是原始的id,需要进行奇偶的调换。但还有一点特殊的是,如果总人数是奇数,还需要保持最后一个id数值不变。由于这个额外的条件限制,我们不能直接的对查询出来的id进行处理,需要采用case语句进行数据的条件分析。如果是奇数,且不是最后一个元素,那么就将其调整为对应的偶数。如果是奇数且为最后一个元素,则保持原id不变。如果是偶数则调整为对应的奇数。利用case语句,完成我们在sql中的数据拆分。根据这种方式,我们就可以按照所需要的结果,处理我们查出来的数据,符合题目的要求。至此,该题目解答完毕。
解题答案及结果
SELECT
(CASE
WHEN MOD(id, 2) != 0 AND counts != id THEN id + 1
WHEN MOD(id, 2) != 0 AND counts = id THEN id
ELSE id - 1
END) AS id,
student
FROM
seat,
(SELECT
COUNT(*) AS counts
FROM
seat) AS seat_counts
ORDER BY id ASC;
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。