코딩테스트/MySQL

[LeetCode] 177. Nth Highest Salary

swwho 2025. 4. 24. 16:20
728x90
반응형

🔗 Problem Link

https://leetcode.com/problems/nth-highest-salary/description/


❔Thinking

  • salary가 담긴 Employee 테이블에서, 상위 n번째의 급여 값을 반환하는 함수를 작성한다.
  • n번째는 중복을 포함하지 않는, 고유한 salary 값에서 계산한다.

💻Solution

1. DENSE_RANK() 함수를 활용한 풀이

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
    SELECT salary FROM (
        SELECT DISTINCT(salary), DENSE_RANK() OVER (ORDER BY salary DESC) AS rnk
        FROM Employee
    ) as V
    WHERE rnk = N
  );
END

 

2. LIMIT, OFFSET을 활용한 풀이

  • LIMIT OFFSET 구문에서 N-1을 사용하면 에러가 발생하기 때문에, offset_val이라는 변수를 활용하여 작성해야한다.
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  DECLARE offset_val INT;
  SET offset_val = N - 1;

  RETURN (
    SELECT DISTINCT(salary) FROM Employee
    ORDER BY salary DESC
    LIMIT 1 OFFSET offset_val
  );
END

🗝️keypoint

  1. DISTINCT를 사용하지 않는 경우, LIMIT을 통해 값을 명시적으로 1개만 출력할 수 있도록 한다.
  2. LIMIT OFFSET은 OFFSET에서부터 LIMIT 개수 만큼의 값을 가져오는 구문이다. (단, offset의 시작점은 0이다.)