
문제
- 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() 사용함.