编写一个 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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.