본문 바로가기

SQL/LeetCode

[SQL] LeetCode: 177. Nth Highest Salary

177. Nth Highest Salary   # 사용자 정의 함수 문제

 

문제

 

Write an SQL query to report the nth highest salary from the Employee table. If there is no nth highest salary, the query should report null.

 

 

풀이1)  CASE문 + FROM절 서브쿼리

CREATE FUNCTION getNthHighestSalary(N INT) 
RETURNS INT
BEGIN
  RETURN (

     SELECT CASE WHEN COUNT(sub.salary) < N THEN NULL
            ELSE MIN(sub.salary)
            END
     FROM (
            SELECT DISTINCT salary
            FROM employee
            ORDER BY salary DESC  
            LIMIT N
          )sub
  );
END

 

 

풀이2) IF문 + FROM절 서브쿼리

CREATE FUNCTION getNthHighestSalary(N INT) 
RETURNS INT
BEGIN
  RETURN (

     SELECT IF( COUNT(sub.salary) < N ,NULL ,MIN(sub.salary))
     FROM (
            SELECT DISTINCT salary
            FROM employee
            ORDER BY salary DESC  
            LIMIT N
          )sub
  );
END

 

 

풀이3) LIMIT + OFFSET 사용

CREATE FUNCTION getNthHighestSalary(N INT) 
RETURNS INT
BEGIN
  SET N = N -1 ;
  RETURN (
  
            SELECT DISTINCT salary
            FROM employee
            ORDER BY salary DESC  
            LIMIT 1 OFFSET N   
            -- N-1번째까지는 지우고 N번째값 1개를 출력해야 하므로 위에서 SET으로 'N = N - 1' 새롭게 정의함

  );
END

 

# LIMIT 5, 10 : 앞의 5개는 제외하고 6번째부터 10개 출력해라 (6~15번째 출력)

#LIMIT N , 1 = LIMIT 1 OFFSET N

  :  N번째까지는 지우고 그 뒤 N+1번째 값 하나 출력