MySQL에서 특정 열의 최댓값을 조회하려면 ORDER BY 절 또는 집계 함수 MAX()를 사용할 수 있습니다. 이 글에서는 두 가지 방법을 예제와 함께 자세히 살펴보겠습니다.
1. ORDER BY 절 사용하기
ORDER BY로 내림차순 정렬한 후 LIMIT으로 첫 번째 행만 가져오면 최댓값을 구할 수 있습니다. 기본 문법은 다음과 같습니다.
SELECT yourColumnName FROM yourTableName ORDER BY yourColumnName DESC LIMIT 0,1;
먼저 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Number int
);
Query OK, 0 rows affected (0.52 sec)INSERT 명령으로 레코드를 삽입합니다.
mysql> insert into DemoTable values(790); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(746); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable values(480); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(880); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(879); Query OK, 1 row affected (0.20 sec)
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select * from DemoTable;
실행 결과는 다음과 같습니다.
+--------+ | Number | +--------+ | 790 | | 746 | | 480 | | 880 | | 879 | +--------+ 5 rows in set (0.00 sec)
이제 ORDER BY를 활용해 열의 최댓값을 조회하는 쿼리입니다.
mysql> select Number from DemoTable order by Number desc limit 0,1;
실행 결과는 다음과 같습니다.
+--------+ | Number | +--------+ | 880 | +--------+ 1 row in set (0.00 sec)
2. 집계 함수 MAX() 사용하기
같은 결과를 얻기 위해 집계 함수 MAX()를 사용할 수도 있습니다. 이 방법이 더 간결하고 일반적으로 권장되는 방식입니다.
mysql> select MAX(Number) from DemoTable;
실행 결과는 다음과 같습니다.
+-------------+ | MAX(Number) | +-------------+ | 880 | +-------------+ 1 row in set (0.00 sec)
두 방법의 차이점
MAX() 함수는 데이터베이스가 인덱스를 활용할 수 있어 대용량 테이블에서 더 효율적입니다. 반면 ORDER BY + LIMIT 방식은 최댓값 외에 상위 N개 값 등 추가 정보가 필요할 때 유용합니다. 단순히 최댓값 하나만 필요하다면 MAX() 함수를 사용하는 것이 좋습니다.