常见的5个SQL面试问题

本文探讨了SQL面试中五个具有挑战性的问题,包括找到第二高薪水、重复电子邮件、温度上升、部门最高薪资及座位互换的解决方案。通过IFNULL、OFFSET、MAX、HAVING子句、DATEDIFF、IN子句和CASE WHEN等高级SQL功能,深入理解SQL查询的复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

在任何以数据为中心的工作中,对SQL有深刻的理解都是成功的关键,尽管这不是工作中最有趣的部分。事实上,除了SELECT FROM WHERE GROUP BY ORDER BY之外,还有更多的SQL方法。你知道的功能越多,操作和查询所需的内容就越容易。

 

作者希望在本文中学习和交流以下两件事:

 

1)学习和教一些基本功能以外的SQL函数

2)探讨一些SQL面试练习问题

 

* 本文中的问题仅来自Leetcode

 

 

 

问题1:第二高的薪水

 

编写一个SQL查询用于从Employee表中获取第二高的薪水。例如,给定下面的Employee表,查询应返回200作为第二高的薪水。如果没有第二高的薪水,则查询应返回null。

+----+--------+| Id | Salary |+----+--------+| 1   | 100     || 2   | 200     || 3   | 300     |+----+--------+

 

1)解决方案A使用IFNULLOFFSET

 

  • IFNULL(表达,alt):如果为null,则ifnull()返回指定的值,否则返回期望的值。 如果没有第二高的薪水,我们会使用它返回null。

  • OFFSET:offset与ORDERBY子句一起使用可忽略指定的前n行。这会很有用,因为你希望获得第二行(第二高的薪水)

SELECTIFNULL((SELECT DISTINCT SalaryFROM EmployeeORDER BY Salary DESCLIMIT 1 OFFSET 1), null) as SecondHighestSalaryFROM EmployeeLIMIT 1

 

2)解决方案B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值