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番目に高い給料を得る
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);