MySQL에서 특정 컬럼 기준으로 가장 큰 값을 가진 상위 N개의 레코드를 조회하려면 ORDER BY ... DESC와 함께 LIMIT 절을 사용하면 됩니다. 이 글에서는 학생 점수 테이블을 예로 들어, 점수가 가장 높은 3명의 학생 데이터를 가져오는 과정을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성하기
먼저 학생 이름과 점수를 저장할 테이블을 생성합니다.
mysql> create table DemoTable1614
-> (
-> StudentName varchar(20),
-> StudentScore int
-> );
Query OK, 0 rows affected (0.78 sec)
StudentName은 문자형(varchar) 컬럼, StudentScore는 정수형(int) 컬럼으로 구성된 간단한 테이블입니다.
2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 여러 학생의 레코드를 추가합니다.
mysql> insert into DemoTable1614 values('Adam',65);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1614 values('Chris',89);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1614 values('Bob',58);
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable1614 values('Sam',98);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1614 values('Mike',87);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1614 values('Carol',79);
Query OK, 1 row affected (0.12 sec)
총 6명의 학생 데이터가 테이블에 저장되었습니다.
3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1614;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+-------------+--------------+ | StudentName | StudentScore | +-------------+--------------+ | Adam | 65 | | Chris | 89 | | Bob | 58 | | Sam | 98 | | Mike | 87 | | Carol | 79 | +-------------+--------------+ 6 rows in set (0.00 sec)
4. 점수가 가장 높은 상위 3개 레코드 조회하기
핵심은 ORDER BY 절에 DESC(내림차순) 옵션을 지정하고, LIMIT 3으로 결과 개수를 제한하는 것입니다.
mysql> select * from DemoTable1614 order by StudentScore DESC LIMIT 3;
실행 결과는 다음과 같습니다.
+-------------+--------------+ | StudentName | StudentScore | +-------------+--------------+ | Sam | 98 | | Chris | 89 | | Mike | 87 | +-------------+--------------+ 3 rows in set (0.00 sec)
정리
ORDER BY 컬럼명 DESC LIMIT N 패턴을 활용하면 특정 컬럼 기준으로 가장 큰 값을 가진 상위 N개의 레코드를 손쉽게 조회할 수 있습니다. 이번 예제에서는 StudentScore를 내림차순 정렬하여 Sam(98점), Chris(89점), Mike(87점), 즉 점수가 가장 높은 3명의 학생을 성공적으로 가져왔습니다. 반대로 가장 낮은 값을 조회하고 싶다면 DESC 대신 오름차순(ASC)을 사용하면 됩니다.