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

MySQL 쿼리로 테이블에서 두 번째로 큰 값 찾는 방법 (LIMIT 1 OFFSET 1 활용)

MySQL에서 테이블의 두 번째 최대값(두 번째로 큰 값)을 구하고 싶다면 LIMIT 1 OFFSET 1을 사용하면 간단하게 해결할 수 있습니다. 이 방법은 값을 내림차순으로 정렬한 뒤, 첫 번째 행(최대값)을 건너뛰고 그 다음 행만 가져오는 원리입니다.

실제 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
    -> (
    -> Value int
    -> );
Query OK, 0 rows affected (0.92 sec)

2. 데이터 삽입

insert 명령을 사용해 테이블에 여러 개의 레코드를 삽입합니다.

mysql> insert into DemoTable values(1);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(2);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(4);
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values(204);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(5);
Query OK, 1 row affected (0.76 sec)

3. 전체 데이터 확인

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

mysql> select *from DemoTable;

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

+-------+
| Value |
+-------+
|     1 |
|     2 |
|     4 |
|   204 |
|     5 |
+-------+
5 rows in set (0.00 sec)

4. 두 번째 최대값 조회 쿼리

테이블에서 두 번째로 큰 값을 찾는 쿼리는 다음과 같습니다.

mysql> select *from DemoTable order by Value desc limit 1 offset 1;

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

+-------+
| Value |
+-------+
|     5 |
+-------+
1 row in set (0.00 sec)

쿼리 동작 원리

위 쿼리가 어떻게 작동하는지 살펴보겠습니다.

order by Value desc — Value 컬럼을 기준으로 내림차순 정렬하여 가장 큰 값부터 나열합니다. 즉, 204 → 5 → 4 → 2 → 1 순서가 됩니다.

limit 1 — 결과 중 1개의 행만 반환합니다.

offset 1 — 첫 번째 행(최대값인 204)을 건너뛰고, 그 다음 행부터 결과를 가져옵니다.

따라서 최대값인 204를 제외한 두 번째로 큰 값인 5가 최종 결과로 출력됩니다.

참고: N번째 큰 값 구하기

같은 방식으로 offset 숫자를 조정하면 N번째로 큰 값도 손쉽게 구할 수 있습니다. 예를 들어 세 번째로 큰 값을 찾으려면 limit 1 offset 2를 사용하면 됩니다.