leetcodeのsql編-n番目に高い給料を得る(一)
946 ワード
SQLクエリーを作成し、Employeeテーブルのn番目に高い給料(Salary)を取得します.
Id
Salary
1
100
2
200
3
300
たとえば、上記のEmployeeテーブルでは、n=2の場合、2番目に高い給料200を返します.n番目に高い給料が存在しない場合は、クエリはnullを返します.
getNthHighestSalary(2)
200
解決策:salaryの逆順序ソートをクエリーし、limit n-1,1でn番目に高い給料を得る
Id
Salary
1
100
2
200
3
300
たとえば、上記のEmployeeテーブルでは、n=2の場合、2番目に高い給料200を返します.n番目に高い給料が存在しない場合は、クエリはnullを返します.
getNthHighestSalary(2)
200
解決策:salaryの逆順序ソートをクエリーし、limit n-1,1でn番目に高い給料を得る
drop FUNCTION if EXISTS getNthHighestSalary;
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
# Write your MySQL query statement below.
# limit , n , p1=n-1
declare p1 int;
# 1
declare p2 int;
# N 0, , p1 p2 0, null
if N <= 0 then
set p1 = 0, p2 = 0;
else
set p1 = n - 1,p2 = 1;
end if;
return (
# IFNULL(expr1,expr2), expr1 , expr1; expr1 null, expr2。
select IFNULL(
(select DISTINCT salary from salary order by salary desc limit p1,p2)
,null
) as SecondHighestSalary
);
END
# function
SELECT getNthHighestSalary(-1);