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

MySQL에서 행 ID와 함께 최댓값(MAX)·최솟값(MIN) 조회하는 방법

MySQL에서 특정 열의 최댓값(MAX) 또는 최솟값(MIN)을 구할 때, 해당 값이 속한 행의 ID까지 함께 확인해야 하는 경우가 종종 있습니다. 이럴 때는 집계 함수인 MAX()MIN()을 서브쿼리와 함께 사용하면 간단하게 해결할 수 있습니다.

테이블 생성하기

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

mysql> create table DemoTable
    (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Number1 int,
    Number2 int
    );
Query OK, 0 rows affected (0.89 sec)

레코드 삽입하기

INSERT 명령어를 사용해 테이블에 데이터를 추가합니다.

mysql> insert into DemoTable(Number1,Number2) values(67,45);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(Number1,Number2) values(90,40);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(Number1,Number2) values(80,43);
Query OK, 1 row affected (0.48 sec)

전체 레코드 조회하기

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

mysql> select *from DemoTable ;

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

+----+---------+---------+
| Id | Number1 | Number2 |
+----+---------+---------+
| 1  | 67      | 45      |
| 2  | 90      | 40      |
| 3  | 80      | 43      |
+----+---------+---------+
3 rows in set (0.00 sec)

행 ID와 함께 MAX 및 MIN 값 조회하기

다음은 Number1의 최댓값 또는 Number2의 최솟값에 해당하는 행을 ID와 함께 조회하는 쿼리입니다.

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

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

+----+---------+---------+
| Id | Number1 | Number2 |
+----+---------+---------+
| 2  | 90      | 40      |
+----+---------+---------+
1 row in set (0.00 sec)

쿼리 설명: 위 쿼리는 서브쿼리를 통해 테이블 전체에서 Number1의 최댓값과 Number2의 최솟값을 먼저 계산한 뒤, 그 값과 일치하는 행만 WHERE 절로 필터링하여 반환합니다. 실행 결과를 보면 Number1이 90으로 가장 크고, 동시에 Number2가 40으로 가장 작은 Id 2번 행이 정확히 조회된 것을 확인할 수 있습니다. 이처럼 집계 함수와 서브쿼리를 조합하면 최댓값·최솟값뿐 아니라 해당 행의 다른 컬럼 정보까지 한 번에 가져올 수 있습니다.