테이블에서 두 번째로 높은 값을 조회하려면 ORDER BY DESC와 함께 LIMIT 1,1을 사용하면 됩니다. 먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
StudentScore int
);
Query OK, 0 rows affected (0.56 sec)샘플 데이터 삽입
insert 명령을 사용하여 테이블에 학생 점수 레코드를 몇 개 삽입합니다.
mysql> insert into DemoTable values(89); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(69); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(97); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable values(99); Query OK, 1 row affected (0.12 sec)
전체 레코드 확인
select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+--------------+ | StudentScore | +--------------+ | 89 | | 69 | | 97 | | 99 | +--------------+ 4 rows in set (0.00 sec)
두 번째로 높은 값 조회 쿼리
두 번째로 높은 값을 가져오는 쿼리는 다음과 같습니다.
mysql> select *from DemoTable order by StudentScore DESC limit 1,1;
실행 결과는 다음과 같습니다.
+--------------+ | StudentScore | +--------------+ | 97 | +--------------+ 1 row in set (0.00 sec)
쿼리 동작 원리
이 쿼리가 어떻게 동작하는지 살펴보겠습니다.
- ORDER BY StudentScore DESC: 점수를 내림차순으로 정렬합니다. 즉, 99 → 97 → 89 → 69 순서로 정렬됩니다.
- LIMIT 1,1: 첫 번째 숫자 1은 건너뛸 행의 수(offset)를, 두 번째 숫자 1은 반환할 행의 수를 의미합니다. 따라서 가장 높은 점수인 99를 건너뛰고 그 다음 점수인 97 하나만 반환됩니다.
이 방법을 응용하면 세 번째, 네 번째 등 N번째로 높은 값도 손쉽게 조회할 수 있습니다. 예를 들어 세 번째로 높은 값을 구하려면 LIMIT 2,1을 사용하면 됩니다.