코딩 테스트/MySQL

[LeetCode] 176. Second Highest Salary

알밤바 2025. 10. 24. 11:00
728x90
반응형

문제

https://leetcode.com/problems/second-highest-salary/

 

 

 

문제 접근 방식

생각보다 간단한 방식이다.

1) MAX() 활용 2) LIMIT, OFFSET 활용 총 2가지 방법이 있다.

 

1) MAX() 활용

- where 조건절을 활용하여 최대값 (첫번째로 높은 salary)보다 작은 값들만 가져옴

- 그 중에서 최대값 (MAX) 조회

select MAX(salary) as 'SecondHighestSalary'
from Employee
where salary < (select MAX(salary) from Employee)
;

 

2) LIMIT, OFFSET 활용

- salary를 내림차순으로 정렬 후 2번째 값을 1개만 가져옴 (limit, offset)

- LIMIT : 설정한 갯수만큼의 값을 가져옴

- OFFSET : 가져올 데이터의 위치 값 (0 : 첫 행 데이터)

select (
    select distinct salary
    from Employee
    order by salary desc
    limit 1 offset 1
)  as 'SecondHighestSalary';

 

여기서 주의해야 할 사항,

스칼라 서브쿼리를 활용하지 않으면, 두번째로 높은 salary가 없을 때 NULL값을 반환하지 않는다.

 

스칼라 서브쿼리 : 하나의 값(스칼라)을 반환하는 서브쿼리

- 항상 하나의 행 (1 row)의 결과값을 반환하며, 값이 없으면 NULL이 반환된다.

- select 절에 컬럼처럼 값 넣을 때 활용

 

테이블 서브쿼리 : 여러 개의 행 또는 열을 반환하는 일반 서브쿼리

- 서브쿼리가 테이블처럼 여러 행을 반환하며, 값이 없으면 아예 0행을 반환한다.

- 리스트, 여러 조건 비교할 때 활용

728x90
반응형

'코딩 테스트 > MySQL' 카테고리의 다른 글

[HackerRank] Weather Observation Station 19  (0) 2025.08.20
[HackerRank] Interviews  (2) 2025.08.18
[HackerRank] Weather Observation Station 18  (2) 2025.08.14
[HackerRank] Occupations  (3) 2025.08.12
[HackerRank] Symmetric Pairs  (2) 2025.08.11