leetcode177 第N高的薪水 Nth Highest Salary

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

 建立表和数据3d

Create table If Not Exists Employee (Id int, Salary int);
Truncate table Employee;
insert into Employee (Id, Salary) values('1', '100');
insert into Employee (Id, Salary) values('2', '200');
insert into Employee (Id, Salary) values('3', '300');

解法:code

1.对每个薪水A,只要大于等于A的不一样薪水个数等于N便可。blog

所以子查询求出大于等于A的不一样薪水个数B。当B=A时,能得出结果。get

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
    select distinct e1.Salary
    from Employee e1
    where N = (
        select count(distinct e2.Salary)
        from Employee e2
        where e2.Salary >= e1.Salary
    )
  );
END

2.直接用order by和limit。要注意的是,limit的偏移从0开始。第N个变成参数时,要改成N-1。it

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    declare p int  default  N - 1;
  RETURN (  
      select distinct salary
      from Employee
      order by salary desc
      limit p,1
  );
END
相关文章
相关标签/搜索