문제
- LeetCode SQL 문제
176. Second Highest Salary / Medium
- 문제 내용 : [링크]
내가 작성한 Query
with temp_01 as( select salary , dense_rank() over(order by salary desc) as rnk from employee ) select max(case when rnk =2 then salary end) as SecondHighestSalary from temp_01
employee
테이블에서 salary
가 2번째로 큰 값을 출력하는 문제이다.
salary
와 dense_rank()
를 통해 salary
순서대로 순위(rnk
) 값을 구해준다.salary
가 큰 값이 순위가 1순위이므로, order by salary desc
주의!
위의 정보를 임시테이블 temp_01
에 저장한다.
rnk
가 2일때 (2번째 순위)의 salary
를 출력해주되, 2번째 순위의 salary
가 없는 경우 null
을 출력해야한다. CASE WHEN THEN
구문을 활용해 2번째 순위의 salary
또는 null
을 출력해준다.
이 때, null
과 2번째 순위 salary
가 있는 경우 후자를 출력하고, 그게 아니면 null
을 출력해야한다. 이를 MAX()
함수를 통해 출력해준다.
⭐ 왜 dense_rank()
인가?
rank()
를 하게 되면, salary
가 제일 큰 1순위 데이터에 중복이 있을 때, rnk
가 2가 아닌 다른 값이 나오게 된다. 그래서 dense_rank()
사용함.