编写一个 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
1
shmilyin 2018-10-29 14:23:44 +08:00
如果我没记错的话,RETURN 前面是不能写东西的吧?
https://ww1.sinaimg.cn/large/005YhI8igy1fwp2ogpbryj30jp06taaa |
2
shmilyin 2018-10-29 14:24:38 +08:00
补上图
|