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

MySQL에서 직원 급여 테이블의 상위 3개 급여 조회하는 방법 (LIMIT & OFFSET 활용)

MySQL에서 직원 급여 데이터가 저장된 테이블에서 가장 높은 급여부터 세 번째로 높은 급여까지 순서대로 조회하려면 LIMITOFFSET 절을 활용하면 됩니다. 이번 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 샘플 테이블 생성

먼저 직원 급여를 저장할 테이블을 생성합니다.

mysql> create table DemoTable867(EmployeeSalary int);
Query OK, 0 rows affected (0.64 sec)

2. 테스트 데이터 삽입

INSERT 문을 사용하여 여러 직원의 급여 데이터를 입력합니다.

mysql> insert into DemoTable867 values(63737);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable867 values(899833);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable867 values(23644);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable867 values(89393);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable867 values(534333);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable867 values(889322);
Query OK, 1 row affected (0.08 sec)

3. 전체 데이터 확인

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

mysql> select *from DemoTable867;

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

+----------------+
| EmployeeSalary |
+----------------+
| 63737 |
| 899833 |
| 23644 |
| 89393 |
| 534333 |
| 889322 |
+----------------+
6 rows in set (0.00 sec)

4. 첫 번째(가장 높은) 급여 조회

급여를 내림차순(DESC)으로 정렬한 뒤 LIMIT 1을 적용하면 가장 높은 급여 하나만 가져올 수 있습니다. 중복된 값이 있을 경우를 대비해 DISTINCT도 함께 사용합니다.

mysql> select distinct(EmployeeSalary) from DemoTable867 order by EmployeeSalary DESC LIMIT 1;

실행 결과:

+----------------+
| EmployeeSalary |
+----------------+
| 899833 |
+----------------+
1 row in set (0.02 sec)

5. 두 번째로 높은 급여 조회

두 번째로 높은 급여를 구하려면 LIMIT 1 OFFSET 1을 사용합니다. OFFSET 1은 정렬된 결과에서 첫 번째 행을 건너뛰고 그다음 행부터 가져오라는 의미입니다.

mysql> select distinct(EmployeeSalary) from DemoTable867 order by EmployeeSalary DESC LIMIT 1 OFFSET 1;

실행 결과:

+----------------+
| EmployeeSalary |
+----------------+
| 889322 |
+----------------+
1 row in set (0.00 sec)

6. 세 번째로 높은 급여 조회

같은 원리로 OFFSET 값을 2로 지정하면 앞의 두 행을 건너뛰고 세 번째로 높은 급여를 조회할 수 있습니다.

mysql> select distinct(EmployeeSalary) from DemoTable867 order by EmployeeSalary DESC LIMIT 1 OFFSET 2;

실행 결과:

+----------------+
| EmployeeSalary |
+----------------+
| 534333 |
+----------------+
1 row in set (0.00 sec)

정리: LIMIT과 OFFSET의 핵심 원리

이 기법의 핵심은 간단합니다.

  • ORDER BY 컬럼명 DESC: 급여를 내림차순으로 정렬하여 높은 값부터 나열합니다.
  • DISTINCT: 동일한 급여 값이 여러 개 존재할 때 중복을 제거하여 순위가 밀리지 않도록 합니다.
  • LIMIT n: 가져올 행의 개수를 지정합니다.
  • OFFSET m: 정렬된 결과에서 처음 m개의 행을 건너뜁니다.

따라서 N번째로 높은 급여를 구하고 싶다면 LIMIT 1 OFFSET (N-1) 패턴을 사용하면 됩니다. 예를 들어 네 번째로 높은 급여는 LIMIT 1 OFFSET 3으로 조회할 수 있습니다. 이 방법은 MySQL 8.0 이상이라면 윈도우 함수인 DENSE_RANK()ROW_NUMBER()를 사용하는 대안도 있으니, 복잡한 순위 처리가 필요하다면 함께 참고하시기 바랍니다.