leet code sql 176
문제
상위 2번째 salary 계산하기
- 중복한 값은 하나로 계산하여 구성
- 만약 결과가 없으면 null
E.g
- 1, 0, 0 → answer = 0
- 1 → answer = null
- 100, 100, 50 → answer = 50
문제 접근
접근 방식1.
dense_rank를 활용하여 2번째 salary를 추출하여 가장 큰 값을 조회
정답은 맞으나, 속도가 매우 느리다.
1
2
3
4
5
6
7
8
9
10
with Employee_salary as (
select
id,
salary,
dense_rank() over (order by salary desc) order_num
from Employee
)
select
MAX(case when order_num = 2 then salary end) as SecondHighestSalary
from Employee_salary;
접근 방식2.
가장 큰 값을 조건절에 넣어 해당 값보다 작은 값중 가장 큰값을 조회
정답은 맞으나, 속도가 매우 느리다.
1
SELECT MAX(SALARY) FROM Employee WHERE SALARY < (SELECT MAX(SALARY) FROM Employee);
접근 방식3.
table을 group by 한 뒤 순서대로 나열한 다음 2번째 행에 대해서 출력
1
2
3
4
5
6
7
with a as (
select salary from employee
group by 1
order by 1 desc
limit 1 offset 1
)
select max(salary) from a;