Exchange Seats

本文介绍了一个有趣的SQL挑战,即在不改变奇数位置末尾学生座位的情况下,将相邻学生的座位进行交换。通过使用CASE WHEN语句或IF函数,我们展示了如何实现这一目标,并提供了两种有效的解决方案。

Exchange Seats

description:
Mary is a teacher in a middle school and she has a table seat storing students’ names and their corresponding seat ids.

The column id is continuous increment.

Mary wants to change seats for the adjacent students.

Can you write a SQL query to output the result for Mary?

+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Abbot   |
|    2    | Doris   |
|    3    | Emerson |
|    4    | Green   |
|    5    | Jeames  |
+---------+---------+

For the sample input, the output is:

+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Doris   |
|    2    | Abbot   |
|    3    | Green   |
|    4    | Emerson |
|    5    | Jeames  |
+---------+---------+

Note:
If the number of students is odd, there is no need to change the last one’s seat.

这道题给了一个seat表,包含学生的座位号id和姓名,并且id是连续相邻递增的。
题目让把相邻座位号的学生交换位置,也就是1和2换,3和4换。交换时直接交换学生的姓名。如果总人数是奇数的话,最后一名学生的位置不动。

这道题不好做,看了leetcode官方solution才懂了。要用到case when语句或者if函数。

思路:对于奇数的id,如果是最后一个id,则id不变;否则id=id+1;如果是偶数的id,则id=id-1。id号的总数可以用select Count(*) from seat查出来。

这是官方题解:

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;

也可以用IF函数,IF(condition, value_if_true, value_if_false)
IF函数类似高级语言的三元表达式,condition为真时返回value_if_true,condition为假时返回value_if_false。
因此也可以这样写:

# Write your MySQL query statement below
select IF(id % 2 = 0, id - 1, 
         IF(id = (select count(*) from seat),
           id, id + 1))
as id, student from seat order by id;

谢谢你的观看!

SEATS是一家专注于提供票务解决方案的公司,在其面试过程中可能会涉及一些特定的技术领域以及通用的职业素养评估。以下是关于SEATS公司面试可能涉及的内容及准备事项的一些信息: --- ### SEATS公司面试常见内容 技术岗位的面试通常包括以下几个方面的问题和技术考察点。 #### 1. 编程能力测试 编程能力是技术类职位的核心考核项,常见的题目类型包括但不限于: - 数据结构与算法分析(例如排序、查找等)。 - 实际编码挑战,比如实现一个简单的API接口或者处理数据流的应用程序。 #### 示例代码片段 - 排序函数实现 ```python def bubble_sort(arr): n = len(arr) for i in range(n): swapped = False for j in range(0, n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] swapped = True if not swapped: break return arr ``` #### 2. SQL数据库查询技能 由于SEATS业务涉及到大量订单管理和数据分析工作,因此熟练掌握SQL语句非常重要。以下是一个基本的例子:如何找出过去一个月内的所有购票记录? ```sql SELECT * FROM orders WHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH); ``` #### 3. 系统设计讨论 对于高级工程师角色来说,系统架构的设计思路会被重点探讨。例如,“如果你要构建一个高并发环境下的在线售票平台,你会考虑哪些关键因素?” 这种开放型问题旨在检验应聘者的全局思维能力和实践经验。 #### 4. 英语沟通技巧 因为该公司可能是国际化运营模式的一部分,所以良好的英文口语表达同样不可或缺。准备好用英语描述自己的项目经历和技术背景显得尤为重要。 --- ### 面试前准备工作建议 为了提高成功率,可以从以下几个角度做足功课: - **熟悉产品和服务** 学习有关SEATS的产品特点及其市场定位有助于展现你对该企业的兴趣程度。 - **复习计算机科学基础知识** 包括操作系统原理、网络协议等内容都是潜在考点。 - **模拟真实场景练习问答环节** 可以找朋友帮忙扮演面试官来进行实战演练。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值