MySQL에서 특정 열의 최댓값을 조회하는 방법은 크게 두 가지가 있습니다. MAX() 집계 함수를 사용하는 방법과, ORDER BY 절과 LIMIT을 조합해 내림차순 정렬 후 첫 번째 행을 가져오는 방법입니다.
기본 문법
최댓값을 가져오려면 아래 두 가지 문법 중 하나를 사용하면 됩니다.
SELECT MAX(yourColumnName) FROM yourTableName;
또는
SELECT * FROM yourTableName ORDER BY yourColumnName DESC LIMIT 1;
두 방식 모두 동일한 결과를 반환하지만, 상황에 따라 적합성이 다릅니다. 단순히 최댓값 자체만 필요하다면 MAX() 함수가 효율적이고, 최댓값을 가진 행 전체의 데이터가 필요하다면 ORDER BY ... LIMIT 1 방식이 유용합니다.
예제 테이블 생성
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Value int
);
Query OK, 0 rows affected (0.84 sec)
데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(45);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(87);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(56);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(77);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(85);
Query OK, 1 row affected (0.17 sec)
전체 데이터 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+
| Value |
+-------+
| 45 |
| 87 |
| 56 |
| 77 |
| 85 |
+-------+
5 rows in set (0.00 sec)
방법 1: MAX() 함수 사용
MAX() 집계 함수를 사용해 위 테이블에서 최댓값을 구해 보겠습니다.
mysql> select max(Value) from DemoTable;
실행 결과는 다음과 같습니다.
+------------+
| max(Value) |
+------------+
| 87 |
+------------+
1 row in set (0.00 sec)
테이블에 저장된 값 중 가장 큰 값인 87이 반환되었습니다.
방법 2: ORDER BY와 LIMIT 사용
이번에는 대안적인 방법으로, 값을 내림차순 정렬한 뒤 첫 번째 행만 가져오는 방식을 살펴보겠습니다.
mysql> select *from DemoTable order by Value desc limit 1;
실행 결과는 다음과 같습니다.
+-------+
| Value |
+-------+
| 87 |
+-------+
1 row in set (0.00 sec)
역시 동일하게 최댓값 87을 얻을 수 있습니다.
정리
두 방법 모두 같은 결과를 제공하지만 용도에 따라 선택하면 좋습니다. 최댓값 하나만 필요할 때는 MAX() 함수가 간결하고 빠르며, 최댓값을 포함한 행 전체 데이터가 필요할 때는 ORDER BY ... DESC LIMIT 1 방식이 더 적합합니다. 참고로 대량의 데이터에서 인덱스가 설정된 열이라면 두 방식 모두 인덱스를 활용해 성능을 높일 수 있습니다.