本文主要是介绍LeetCode数据库题目Oracle解答:177. 第N高的薪水,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
编写一个 SQL 查询,获取 Employee
表中第 n 高的薪水(Salary)。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee
表,n = 2 时,应返回第二高的薪水 200
。如果不存在第 n 高的薪水,那么查询应返回 null
。
+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200 |
+------------------------+
解题思路:
总体思路利用oracle的rownum伪列打标实现
1.倒序取出所有不重复的Salary
2.利用rownum伪列标记排位
3.取出排位为N的Salary
答案:
CREATE FUNCTION getNthHighestSalary (N IN NUMBER)
RETURN NUMBER IS result NUMBER;
BEGIN/* Write your PL/SQL query statement below */SELECT nvl(Salary, NULL)INTO resultFROM (SELECT Salary,rownum AS rn --2.利用rownum伪列标记排位FROM (SELECT DISTINCT SalaryFROM EmployeeWHERE Salary IS NOT NULLORDER BY Salary DESC --1.倒序取出所有不重复的Salary))where rownum<=NWHERE rn = N; --3.取出排位为N的SalaryRETURN result;
END;
注意点:
如使用rownum>=N是查不出记录的,因为rownum是一个总是从1开始的伪列,Oracle 认为rownum>=N不成立。
这篇关于LeetCode数据库题目Oracle解答:177. 第N高的薪水的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!