코딩테스트/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
- DISTINCT를 사용하지 않는 경우, LIMIT을 통해 값을 명시적으로 1개만 출력할 수 있도록 한다.
- LIMIT OFFSET은 OFFSET에서부터 LIMIT 개수 만큼의 값을 가져오는 구문이다. (단, offset의 시작점은 0이다.)