📝 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 문제 해결 방법
- ORDER BY와 LIMIT을 사용하여 급여 순위 결정
- salary 값을 내림차순(DESC) 정렬하여 높은 급여가 먼저 나오도록 합니다.
- LIMIT과 OFFSET을 활용해 N번째 값을 조회합니다.
- DISTINCT를 사용하여 중복된 급여 제거
- 같은 급여가 여러 번 등장할 수 있으므로 DISTINCT를 사용하여 중복을 제거합니다.
- NULL 반환 처리
- N번째 급여가 존재하지 않는 경우 NULL을 반환해야 합니다.
- 스토어드 함수(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
반응형
'LeetCode' 카테고리의 다른 글
[LeetCode] 184. Department Highest Salary (0) | 2025.03.26 |
---|---|
[LeetCode] 178. Rank Scores (0) | 2025.03.20 |
[LeetCode] 1965. Employees With Missing Information (0) | 2025.03.18 |
[LeetCode] 1890. The Latest Login in 2020 (2) | 2025.03.18 |
[LeetCode] 1873. Calculate Special Bonus (0) | 2025.03.17 |