编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。

|----|--------|

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

例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。

|------------------------|

getNthHighestSalary(2)
200
------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
--①
CREATE FUNCTION getNthHighestSalary(N IN NUMBER) RETURN NUMBER IS
result NUMBER;
BEGIN
/* Write your PL/SQL query statement below */
select(
SELECT SecondHighestSalary FROM ( select Salary SecondHighestSalary,ROWNUM num from(select distinct Salary from Employee order by Salary desc)) WHERE num=N) SecondHighestSalary into result from dual;

RETURN result;
END;
--② 使用分析函数
CREATE FUNCTION getNthHighestSalary(N IN NUMBER) RETURN NUMBER IS
result NUMBER;
BEGIN
select max(salary) into result from(
select salary,dense_rank() over(order by salary desc) as rn from employee)
where rn = n;
RETURN result;
END;