본문 바로가기

[LeetCode] 177. Nth Highest Salary

by qwee0328 2025. 3. 20.

📝 177. Nth Highest Salary

🔹 N번째 최고 연봉

Employee 테이블에서 n번째로 높은 급여를 찾는 솔루션을 작성하세요. n번째로 높은 급여가 없으면 null을 반환합니다.

 

 

📝 문제 설명

Nth Highest Salary 문제는 Employee 테이블에서 N번째로 높은 급여를 조회하는 SQL 함수를 작성하는 문제입니다.
쿼리를 실행했을 때 N번째로 높은 급여가 존재하지 않으면 NULL을 반환해야 합니다.

 

 

📊 테이블 구조

Employee 테이블

Column Name Type
id int
salary int

 

 

💡 SQL 문제 해결 방법

  1. ORDER BY와 LIMIT을 사용하여 급여 순위 결정
    • salary 값을 내림차순(DESC) 정렬하여 높은 급여가 먼저 나오도록 합니다.
    • LIMIT과 OFFSET을 활용해 N번째 값을 조회합니다.
  2. DISTINCT를 사용하여 중복된 급여 제거
    • 같은 급여가 여러 번 등장할 수 있으므로 DISTINCT를 사용하여 중복을 제거합니다.
  3. NULL 반환 처리
    • N번째 급여가 존재하지 않는 경우 NULL을 반환해야 합니다.
  4. 스토어드 함수(CREATE FUNCTION) 사용
    • MySQL에서 N번째 급여를 구하는 함수를 생성합니다.

 

반응형

 

🖥️ SQL 풀이

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
  );
END

 

 

🔍 쿼리 분석

  • ORDER BY salary DESC
    • 급여를 내림차순 정렬하여 가장 높은 급여가 먼저 나오도록 합니다.
  • DISTINCT salary
    • 중복된 급여를 제거하여 중복으로 인해 잘못된 결과가 나오는 것을 방지합니다.
  • LIMIT 1 OFFSET N-1
    • LIMIT 1은 한 개의 값을 반환하도록 설정합니다.
    • OFFSET N-1을 사용하여 N번째 값을 가져오기 위해 인덱스를 조정합니다. (0부터 시작)
  • CREATE FUNCTION
    • getNthHighestSalary(N) 함수는 N번째로 높은 급여를 반환합니다.
    • 만약 N번째 급여가 없으면 자동으로 NULL이 반환됩니다.

 

📌 실행 예제

📊 입력 데이터

Employee 테이블

id salary
1 100
2 200
3 300

 

쿼리 실행 결과

  • n = 2
getNthHighestSalary(2)
200

 

  • 2번째로 높은 월급은 200 입니다.

 

Employee 테이블

id salary
1 100

 

쿼리 실행 결과

  • n = 2
getNthHighestSalary(2)
null

 

  • 2번째로 높은 월급이 없으므로 null을 출력합니다.

 

🎯 결론

이 문제는 SQL의 정렬(ORDER BY), 중복 제거(DISTINCT), 그리고 LIMIT OFFSET을 활용하는 방법을 익힐 수 있는 문제입니다.
MySQL에서는 LIMIT과 OFFSET을 사용하여 손쉽게 N번째 값을 조회할 수 있으며, 없을 경우 NULL을 반환하는 점이 중요합니다.

 

 


 

 

더 많은 SQL 문제 풀이를 보고 싶다면 LeetCode SQL 문제 모음을 확인해 보세요! 🚀

728x90
반응형