Problem : https://leetcode.com/problems/second-highest-salary/
LeetCode - The World's Leading Online Programming Learning Platform
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
MAX가 아닌, 두번째로 높은 거를 찾는 건데, 그렇게 만만한 문제는 아니다!
Sol 1) Dense_Rank를 이용한 풀이법
이게 동률일 경우도 고려해야 하므로, Rank를 매겨 2등을 찾고, 2등도 여러명일 수 있어 distinct 를 줄 수 있다.
마지막으로 2등이 없을 때를 대비하여 IFNULL로 0을 준다.
Remark. 이 방법으로 풀 경우 2를 N으로 고칠 경우, Nth 문제의 해결도 간단하게 된다.
SELECT
IFNULL(
(SELECT
DISTINCT(SALARY)
FROM(
SELECT
SALARY,
DENSE_RANK() OVER (ORDER BY SALARY DESC) AS D_RANK
FROM EMPLOYEE
) AS SUB
WHERE SUB.D_RANK = 2
), NULL) AS SecondHighestSalary
Sol 2) 단순하게 MAX로 서브 쿼리를 쉽게 사용하는 방법
MAX는 없을 경우 NULL을 뱉어 줄 수 있는 애라고 한다.(없는 것을 연산해서 NULL) 따라서 IF_NULL이 필요 없다.
SELECT MAX(SALARY) AS SecondHighestSalary
FROM EMPLOYEE
WHERE SALARY < (
SELECT MAX(SALARY)
FROM EMPLOYEE
)
Sol 3) Offset을 활용하는 방법
이 역시, 0번 줄부터 활용하므로 N으로 일반화가 가능한 풀이이다.
SELECT
IFNULL((
SELECT
DISTINCT(SALARY)
FROM EMPLOYEE
ORDER BY SALARY DESC
LIMIT 1
OFFSET 1
), NULL) AS SecondHighestSalary
'SQL' 카테고리의 다른 글
[Leetcode] Confirmation Rate (0) | 2024.01.30 |
---|---|
[LeetCode] Department Top Three Salaries (1) | 2024.01.30 |
[SQL] 윈도우 함수 다시 정리 (0) | 2024.01.27 |
[파이썬 압수] (3) SQL로만 리텐션 구하기 (1) | 2024.01.16 |
[파이썬 압수] (2) SQL로만 Funnel 구하기 (0) | 2024.01.15 |