编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。
+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200 |
+------------------------+
上一个题目我们用max函数求了第二高的薪资,但是第N高的就不能用max函数求解了。我们用limit来求解,很多人用习惯了如下的语句:
select salary from employee limit N
以为limit只是用来限定个数的。
其实limit还有另一种用法就是limit offset.
select salary from employee limit 4 offset 9
表示从10开始,返回4行,也可以写作:
select salary from employee limit 9, 4
因为这里涉及到哟不要返回空的问题,所以用了IFNULL函数:
IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数。 否则,IFNULL函数返回第二个参数。 综上,我们最终的sql书写如下:
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET N=N-1;
RETURN (
select IFNULL((select distinct salary from employee order by salary desc limit N,1),NULL)
);
END
本文分享自 Leetcode名企之路 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!