728x90
https://leetcode.com/problems/nth-highest-salary/
- 문제
- N번째로 높은 급여를 출력하라. 만약 없으면 NULL 출력
- 풀이 1 - 사용자 정의 함수 + 서브쿼리
- 급여를 내림차순으로 정렬하여 N개를 뽑기 (sub 테이블)
- 그 N개의 급여 중 가장 작은 급여 == N번째 급여
- sub 테이블에 행 갯수가 N보다 작다 == N번째 급여가 없다 -> NULL 출력하라
SELECT IF(COUNT(sub.salary) < N, NULL, MIN(sub.salary))
FROM (
SELECT DISTINCT salary
FROM Employee
ORDER BY salary DESC
LIMIT N
);
- 정답 코드 1
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
) AS sub
);
END
- 풀이 2 - 사용자 정의 함수 + OFFSET
- 급여를 내림차순으로 정렬
- N번째 급여를 가져오기
- LIMIT 1 OFFSET N-1 : 상위 N-1개를 버리고 다음 1개 -> N번째 행만 의미
- RETURN 안에서 파라미터를 수정할 수 없다.
- SET을 통해 수정
- (DECLARE를 통해서도 가능)
- 정답 코드 2
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
728x90
반응형
'TIL - 프로그래밍 > SQL' 카테고리의 다른 글
[SQL] 윈도우 함수 (Window Functions) (0) | 2023.07.09 |
---|---|
[SQL] LIMIT / OFFSET (0) | 2023.07.08 |
[SQL] 사용자 정의 함수 (0) | 2023.07.08 |
[SQL] CASE문, IF문, IF함수 - 기본 구조, 예시 (0) | 2023.07.08 |
[SQL] 소수점 올림, 반올림, 내림, 자르기 (0) | 2023.07.08 |
댓글