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번째 값 하나 출력
'SQL > LeetCode' 카테고리의 다른 글
| [SQL] LeetCode: 1789. Primary Department for Each Employee (1) | 2024.01.26 |
|---|---|
| [SQL] LeetCode: 1731. The Number of Employees Which Report to Each Employee (0) | 2024.01.17 |
| [SQL] LeetCode: 185. Department Top Three Salaries (0) | 2023.06.24 |
| [SQL] LeetCode: 184. Department Highest Salary (윈도우 함수) (0) | 2023.06.24 |
| [SQL] LeetCode: 180. Consecutive Numbers (0) | 2023.06.23 |