Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL MAX() 함수 활용법 – 최대값을 가진 행의 다른 필드 조회하기

개요

SQL에서 특정 컬럼의 최대값(MAX)을 가진 행의 다른 컬럼 값까지 함께 조회하고 싶을 때가 있습니다. 단순히 MAX() 함수만 사용하면 최대값 자체만 반환되기 때문에, 같은 행에 있는 다른 필드를 가져오려면 서브쿼리(Sub Query)와 함께 활용해야 합니다.

이 글에서는 예제 테이블을 만들고, MAX() 함수를 이용해 원하는 데이터를 조회하는 과정을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 상품 ID와 상품 금액을 저장할 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> ProductId int,
-> ProductAmount int
-> );
Query OK, 0 rows affected (0.78 sec)

2. 샘플 데이터 삽입

INSERT 명령어를 사용해 테스트용 레코드를 입력합니다.

mysql> insert into DemoTable values(1001,7895);
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values(1003,8903);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(1010,7690);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(2010,8450);
Query OK, 1 row affected (0.12 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블에 저장된 모든 레코드를 확인해 보겠습니다.

mysql> select *from DemoTable;

실행 결과는 아래와 같습니다.

+-----------+---------------+
| ProductId | ProductAmount |
+-----------+---------------+
| 1001 | 7895 |
| 1003 | 8903 |
| 1010 | 7690 |
| 2010 | 8450 |
+-----------+---------------+
4 rows in set (0.00 sec)

4. MAX() 값에 해당하는 행 조회하기

가장 핵심적인 부분입니다. WHERE 절 안에 서브쿼리를 넣어, ProductAmount 컬럼의 최대값과 일치하는 행 전체를 조회합니다.

mysql> select *from DemoTable
-> where ProductAmount=( select max(ProductAmount) from DemoTable);

위 쿼리는 먼저 서브쿼리 select max(ProductAmount) from DemoTable을 실행해 최대 금액인 8903을 구한 뒤, 그 값과 일치하는 행을 반환합니다.

실행 결과는 다음과 같습니다.

+-----------+---------------+
| ProductId | ProductAmount |
+-----------+---------------+
| 1003 | 8903 |
+-----------+---------------+
1 row in set (0.05 sec)

5. 참고: ORDER BY와 LIMIT을 활용한 대안

서브쿼리 대신 정렬과 LIMIT을 조합해도 동일한 결과를 얻을 수 있습니다.

mysql> select *from DemoTable
-> order by ProductAmount desc limit 1;

다만 이 방식은 최대값을 가진 행이 여러 개일 경우 그중 하나만 반환한다는 점에 유의해야 합니다. 중복된 최대값을 모두 조회하려면 앞서 소개한 서브쿼리 방식이 더 안전합니다.

정리

  • MAX() 함수는 집계 함수이므로 단독으로는 최대값만 반환합니다.
  • WHERE 절에 서브쿼리를 결합하면 최대값을 가진 행의 다른 컬럼도 함께 조회할 수 있습니다.
  • 최대값이 중복되는 경우에도 서브쿼리 방식은 모든 해당 행을 정확히 반환합니다.