Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 테이블에서 두 번째로 높은 직원 급여를 조회하는 방법

MySQL 테이블에서 두 번째로 높은 급여를 구하는 문제는 데이터베이스 학습 및 면접에서 자주 등장하는 대표적인 질문입니다. 핵심은 ORDER BY 절과 LIMIT, OFFSET 절을 함께 사용하는 것입니다.

예제 데이터 준비

개념을 이해하기 위해 다음과 같은 'Salary' 테이블의 데이터를 사용하겠습니다.

mysql> Select * from Salary;
+--------+--------+
| Name   | Salary |
+--------+--------+
| Gaurav |  50000 |
| Rahul  |  40000 |
| Ram    |  45000 |
| Raman  |  45000 |
+--------+--------+
4 rows in set (0.00 sec)

LIMIT와 OFFSET으로 두 번째 최고 급여 조회하기

급여를 내림차순(DESC)으로 정렬한 뒤, 첫 번째 행은 건너뛰고(OFFSET 1) 그다음 한 개의 행만 가져오면(LIMIT 1) 두 번째로 높은 급여를 얻을 수 있습니다.

mysql> Select * from Salary order by Salary DESC limit 1 offset 1;
+-------+--------+
| name  | Salary |
+-------+--------+
| Raman |  45000 |
+-------+--------+
1 row in set (0.00 sec)

쿼리 동작 원리

  • ORDER BY Salary DESC : 급여를 기준으로 높은 순서대로 정렬합니다.
  • OFFSET 1 : 정렬된 결과에서 첫 번째 행, 즉 최고 급여를 가진 행을 건너뜁니다.
  • LIMIT 1 : 건너뛴 후 남은 결과 중 한 개의 행만 반환합니다.

서브쿼리를 활용한 대체 방법

LIMIT/OFFSET 방식 외에도 MAX() 함수와 서브쿼리를 조합하여 두 번째로 높은 급여를 구할 수 있습니다.

mysql> SELECT MAX(Salary) AS SecondHighest
    -> FROM Salary
    -> WHERE Salary NOT IN (SELECT MAX(Salary) FROM Salary);

이 쿼리는 전체 급여 중 최댓값을 제외한 나머지 급여들 중에서 다시 최댓값을 찾는 방식으로 동작합니다.

주의할 점

위 예제처럼 동일한 급여(45,000)를 받는 직원이 여러 명인 경우, 중복 값 처리 방식에 따라 결과가 달라질 수 있습니다. 중복을 제거하고 고유한 급여 순위를 기준으로 조회하려면 DISTINCT 키워드를 함께 사용하는 것이 안전합니다.