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

MySQL에서 MIN()과 MAX()를 사용해 최솟값·최댓값에 해당하는 행 조회하기

MySQL에서 특정 열의 가장 낮은 값을 구할 때는 MIN() 함수를, 가장 높은 값을 구할 때는 MAX() 함수를 사용합니다. 이 두 집계 함수를 서브쿼리와 결합하면 최솟값이나 최댓값을 가진 전체 행 데이터를 손쉽게 조회할 수 있습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
(
    CustomerName varchar(20),
    ProductAmount int
) ;
Query OK, 0 rows affected (1.03 sec)

2. 샘플 데이터 삽입

INSERT 명령을 사용해 테이블에 레코드를 추가합니다.

mysql> insert into DemoTable values('Chris',3599);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('David',7843);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Mike',97474);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('Bob',65884);
Query OK, 1 row affected (0.19 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+--------------+---------------+
| CustomerName | ProductAmount |
+--------------+---------------+
| Chris        |          3599 |
| David        |          7843 |
| Mike         |         97474 |
| Bob          |         65884 |
+--------------+---------------+
4 rows in set (0.00 sec)

4. 최솟값과 최댓값에 해당하는 행 조회

다음은 MAX()MIN()을 서브쿼리로 활용하여 최댓값 또는 최솟값을 가진 행을 가져오는 쿼리입니다.

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

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

+--------------+---------------+
| CustomerName | ProductAmount |
+--------------+---------------+
| Chris        |          3599 |
| Mike         |         97474 |
+--------------+---------------+
2 rows in set (0.00 sec)

쿼리 동작 방식 설명

이 쿼리는 두 개의 서브쿼리를 사용합니다. 첫 번째 서브쿼리인 (select max(ProductAmount) from DemoTable)은 테이블 내 ProductAmount 열의 최댓값(97474)을 반환하고, 두 번째 서브쿼리인 (select min(ProductAmount) from DemoTable)은 최솟값(3599)을 반환합니다. WHERE 절의 OR 조건을 통해 이 두 값 중 하나와 일치하는 행만 최종 결과로 출력됩니다.

참고 사항

만약 최솟값과 최댓값이 각각 여러 행에 존재한다면(예: 동일한 금액을 가진 고객이 여러 명인 경우), 해당하는 모든 행이 함께 조회됩니다. 또한 MySQL 8.0 이상에서는 윈도우 함수를 사용해 성능을 개선할 수도 있지만, 소규모 테이블에서는 위 방식이 가장 직관적이고 널리 사용됩니다.