- 第N高的薪水
难度
中等
题目详情
编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。
Employee表+----+--------+| Id | Salary |+----+--------+| 1 | 100 || 2 | 200 || 3 | 300 |+----+--------++-------------------------+| getNthHighestSalary(2) |+-------------------------+| 200 |+-------------------------+例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。
思路
- 排名第N高,意味着 OFFSET N-1,但是LIMIT和OFFSET 只能接受正整数,0、负数、小数都不支持,所以需要事先声明 N=N-1
题解
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET N := N-1;
RETURN (
SELECT
salary
FROM
employee
GROUP BY
salary
ORDER BY
salary DESC
LIMIT N, 1
);
END
