03/14 SQL 문제풀이 - 176. Second Highest Salary (Leetcode) ⭐⭐

Data Architect / Engineer·2024년 3월 14일
1

1일_1SQL

목록 보기
53/63
post-thumbnail

문제

  • 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번째로 큰 값을 출력하는 문제이다.

  • salarydense_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() 사용함.

profile
질문은 계속돼 아오에

0개의 댓글