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

MySQL Employee 테이블에서 최대 및 두 번째 최대 급여 조회하기

MySQL에서 Employee(직원) 테이블의 최대 급여와 두 번째로 높은 급여를 조회하려면 LIMIT 절과 OFFSET 절을 함께 사용하면 됩니다. 이 방법은 급여 기준으로 내림차순 정렬한 후 상위 2개의 행만 가져오는 방식으로, 가장 간단하고 널리 사용되는 방법입니다.

기본 문법

SELECT yourColumnName1, yourColumnName2, ....N FROM yourTableName ORDER BY yourColumnName DESC LIMIT 2 OFFSET 0;
  • ORDER BY ... DESC: 지정한 열(급여)을 내림차순으로 정렬합니다.
  • LIMIT 2: 결과 중 상위 2개 행만 반환합니다.
  • OFFSET 0: 첫 번째 행부터 결과를 가져옵니다. OFFSET을 생략해도 동일하게 동작합니다.

예제 테이블 생성

먼저 실습용 테이블을 만들어 보겠습니다. 아래 쿼리로 직원 정보를 저장할 테이블을 생성합니다.

mysql> create table EmployeeMaxAndSecondMaxSalary
    -> (
    -> EmployeeId int,
    -> Employeename varchar(20),
    -> EmployeeSalary int
    -> );
Query OK, 0 rows affected (0.88 sec)

샘플 데이터 삽입

INSERT 명령을 사용해 몇 개의 직원 레코드를 추가합니다.

mysql> insert into EmployeeMaxAndSecondMaxSalary values(1,'John',34566);
Query OK, 1 row affected (0.20 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(2,'Bob',56789);
Query OK, 1 row affected (0.17 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(3,'Carol',44560);
Query OK, 1 row affected (0.26 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(4,'Sam',76456);
Query OK, 1 row affected (0.29 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(5,'Mike',65566);
Query OK, 1 row affected (0.14 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(6,'David',89990);
Query OK, 1 row affected (0.19 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(7,'James',68789);
Query OK, 1 row affected (0.12 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(8,'Robert',76543);
Query OK, 1 row affected (0.13 sec)

전체 데이터 확인

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from EmployeeMaxAndSecondMaxSalary;

실행 결과는 다음과 같습니다.

+------------+--------------+----------------+
| EmployeeId | Employeename | EmployeeSalary |
+------------+--------------+----------------+
|          1 | John         | 34566          |
|          2 | Bob          | 56789          |
|          3 | Carol        | 44560          |
|          4 | Sam          | 76456          |
|          5 | Mike         | 65566          |
|          6 | David        | 89990          |
|          7 | James        | 68789          |
|          8 | Robert       | 76543          |
+------------+--------------+----------------+
8 rows in set (0.00 sec)

최대 및 두 번째 최대 급여 조회 쿼리

이제 LIMIT과 OFFSET을 사용해 최대 급여와 두 번째로 높은 급여를 받는 직원을 조회하는 쿼리입니다.

mysql> select EmployeeId, Employeename, EmployeeSalary from EmployeeMaxAndSecondMaxSalary order by
    -> EmployeeSalary desc limit 2 offset 0;

결과로 급여가 가장 높은 상위 2명의 직원 레코드가 출력됩니다.

+------------+--------------+----------------+
| EmployeeId | Employeename | EmployeeSalary |
+------------+--------------+----------------+
|          6 | David        | 89990          |
|          8 | Robert       | 76543          |
+------------+--------------+----------------+
2 rows in set (0.00 sec)

위 결과에서 David(89,990)이 최고 급여자, Robert(76,543)가 두 번째로 높은 급여를 받는 직원임을 확인할 수 있습니다.

참고: 중복 급여 처리하기

만약 동일한 급여를 받는 직원이 여러 명 있어 '서로 다른 급여 값' 기준으로 두 번째 최댓값을 구하고 싶다면 DISTINCT를 활용할 수 있습니다.

SELECT DISTINCT EmployeeSalary FROM EmployeeMaxAndSecondMaxSalary ORDER BY EmployeeSalary DESC LIMIT 1 OFFSET 1;

이 쿼리는 급여 값을 중복 제거 후 내림차순 정렬하고, OFFSET 1로 첫 번째(최댓값)를 건너뛰어 두 번째로 큰 고유 급여 값만 반환합니다.