반응형
오늘은 리트코드에서 176번 문제인 Second Highest Salar에 대한 해설을 Oracle 기반으로 해보고자 한다. 이 문제에서 사용할 SQL 개념은 Sub Query, Max 함수 그리고 시공간 복잡도의 효율화이다. 해당 개념들을 최대한 간결하고 쉽게 설명하는 동시에 코드 해설을 해보고자 한다.
목차
1. 문제의 출처 및 기본 설명
2. Oracle 코드 해설 - SQL 코드 효율화하기
문제의 출처 및 기본 설명

문제의 출처는 이 주소에 있으니 참고하길 바란다. 문제의 요구사항은 Employee 테이블에서 2번째로 높은 연봉이 과연 얼마인지 추출하는 것이다. 여기서 또 핵심은 만약 두 번째가 없다면 반드시 null 값을 반환해야 한다는 것이다.
Oracle 코드 해설 - SQL 코드 효율화 하기
1
2
3
4
5
6
7
8
9
10
11
|
-- Point2. 2번재 높은 값 반환하기
SELECT MAX(a.salary) as SecondHighestSalary
FROM employee a
where 1 = 1
-- Point1. 가장 높은 값 제외 시켜주기
and a.SALARY not in ( SELECT max(b.salary)
FROM employee b
)
|
cs |
- 문제의 Point 해설
- Point1. Subquery를 통한 가장 높은 연봉 제외하기
- 우선 가장 높은 연봉을 찾아내 주어야 하기 때문에 in 연산자 안에 정수를 받아야 한다.
- 이때 이 숫자를 제외해주어야 하기 때문에 not과 in 연산자를 활용하였고, 사실 이 부분으 !=, <> 등 다양한 풀이가 가능하다.
- 또한 subquery 영역으로 데이터를 제외 시켜주었기에 원하는 row만 테이블에서 빠지게 된다.
- Point2. Max 집계 함수를 통한 정답 찾기
- Max함수를 쓰는데는 2가지 이유가 있다.
- 첫 번째는 남아있는 테이블 Row 중에서 가장 큰 값을 찾으면 바로 두 번째 높은 연봉을 반환할 수 있다.
- 두 번째는 만약 테이블에 아무런 값이 남아 있지 않다면 집계함수는 null을 반환하기 때문에 문제의 함정을 피해갈 수 있다.
- Point1. Subquery를 통한 가장 높은 연봉 제외하기
반응형
'SQL - Mysql & Oracle > SQL 실전 코딩 테스트' 카테고리의 다른 글
SQL 코딩 테스트 오답노트 작성 요령(합격률 올리는 꿀팁!) (0) | 2023.09.23 |
---|---|
데이터 분석가의 코딩테스트 대비 A to Z(feat. 예제, 사이트, 계획) (0) | 2023.09.02 |
[Orcale] 리트코드(Leet Code) - Rank Scores 정답 해설(feat. Rank 함수) (0) | 2022.09.02 |
[Oracle] 입양 시각 구하기(1) - Group by 사용법 마스터하기 (0) | 2022.08.31 |
[SQL] 프로그래머스 - 보호소에서 중성화한 동물(inner join 기출) (0) | 2022.06.09 |