编写一个 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