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를 사용하면 됩니다.