第N高的薪水
编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。
±—±-------+
| Id | Salary |
±—±-------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
±—±-------+
例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。
±-----------------------+
| getNthHighestSalary(2) |
±-----------------------+
| 200 |
±-----------------------+
MSSQL
思路:
找第N高的薪水:
要想找到第N高的薪水,只需要找出现有集合其中薪水比它的子集中最大的薪水还大的个数是N的子集即可。
例如:现有集合 a ={5,4,3,2,1};要找出它的第3高的数,则只需要找到一个子集b={1,2,3}满足a中集合中元素大于等于b中最大元素的个数为3即可。
示例中,5,4,3一共3个元素满足此条件,故第3高的元素就是子集b中的最大元素。
实现:
CREATE FUNCTION getNthHighestSalary(@N INT) RETURNS INT AS
BEGIN
RETURN (
/* Write your T-SQL query statement below. */
select Max(e1.Salary) from Employee e1
where @N=(select Count(Distinct(e2.Salary)) from Employee e2
where e2.Salary>=e1.Salary
)
);
END
注:
1.Distionct表示不能是重复的
2.如果Count取到的数量不等于N,则会返回null