MySQL에서 테이블의 특정 열을 기준으로 가장 큰 값 2개를 조회하려면 ORDER BY 절과 LIMIT 절을 함께 사용하면 됩니다. 열 값을 내림차순(DESC)으로 정렬한 후, LIMIT 2를 지정하여 상위 2개 행만 가져오는 방식입니다.
select *from yourTableName order by yourColumnName DESC LIMIT 2;
1단계: 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Value int
-> );
Query OK, 0 rows affected (0.54 sec)
2단계: 데이터 삽입하기
insert 명령어를 사용해 테이블에 샘플 데이터를 입력합니다.
mysql> insert into DemoTable values(90);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(70);
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(120);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(98);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(105);
Query OK, 1 row affected (0.19 sec)
3단계: 전체 데이터 확인하기
select 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+-------+
| Value |
+-------+
| 90 |
| 70 |
| 40 |
| 120 |
| 98 |
| 105 |
+-------+
6 rows in set (0.00 sec)
4단계: 가장 큰 값 2개 조회하기
다음 쿼리는 Value 열을 기준으로 내림차순 정렬한 뒤, 상위 2개의 레코드만 반환합니다.
mysql> select *from DemoTable order by Value DESC LIMIT 2;
출력 결과
+-------+
| Value |
+-------+
| 120 |
| 105 |
+-------+
2 rows in set (0.00 sec)
동작 원리 정리
위 쿼리가 동작하는 과정은 다음과 같습니다.
1. 정렬: ORDER BY Value DESC가 Value 열의 값을 큰 순서대로 정렬합니다. 즉, 120 → 105 → 98 → 90 → 70 → 40 순으로 배치됩니다.
2. 제한: LIMIT 2가 정렬된 결과 중 앞의 2개 행만 반환하므로, 자연스럽게 최댓값과 두 번째로 큰 값인 120과 105가 조회됩니다.
이 패턴은 상위 N개 데이터를 구하는 가장 간단하고 널리 쓰이는 방법입니다. 참고로 동점자 처리나 그룹별 최댓값 조회가 필요하다면 DENSE_RANK() 같은 윈도우 함수를 활용하는 것도 좋은 대안입니다.