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

MySQL에서 그룹별 최대값 조회하기 – GROUP BY와 MAX() 활용법

MySQL 테이블에서 특정 컬럼의 각 값(그룹)별로 최대값을 조회해야 하는 경우가 자주 있습니다. 예를 들어 국가별 인구 데이터에서 각 국가의 최대 인구 값을 구하고 싶다면, GROUP BY 절과 MAX() 집계 함수를 함께 사용하면 됩니다.

이번 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 예제 테이블 생성하기

먼저 국가 이름과 인구 정보를 저장할 테이블을 생성합니다.

mysql> create table DemoTable
    -> (
    -> CountryName varchar(20),
    -> Population int
    -> );
Query OK, 0 rows affected (0.56 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다. 같은 국가가 여러 번 등장하도록 데이터를 구성했습니다.

mysql> insert into DemoTable values('US',560);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values('UK',10090);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('UK',8794);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('US',1090);
Query OK, 1 row affected (0.21 sec)

3. 전체 데이터 확인하기

SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

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

+-------------+------------+
| CountryName | Population |
+-------------+------------+
| US | 560 |
| UK | 10090 |
| UK | 8794 |
| US | 1090 |
+-------------+------------+
4 rows in set (0.00 sec)

4. 그룹별 최대값 조회 쿼리 실행하기

이제 핵심인 쿼리입니다. GROUP BY로 국가 이름을 묶고, MAX() 함수로 각 그룹의 최대 인구 값을 구합니다.

mysql> select CountryName,max(Population) from DemoTable group by CountryName;

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

+-------------+-----------------+
| CountryName | max(Population) |
+-------------+-----------------+
| US | 1090 |
| UK | 10090 |
+-------------+-----------------+
2 rows in set (0.00 sec)

결과 해석

위 결과를 보면 US는 두 개의 레코드(560, 1090) 중 최대값인 1090이, UK는 두 개의 레코드(10090, 8794) 중 최대값인 10090이 반환된 것을 확인할 수 있습니다.

추가 팁

  • MIN(), AVG(), SUM(), COUNT() 등 다른 집계 함수도 GROUP BY와 동일한 방식으로 조합하여 사용할 수 있습니다.
  • 결과를 정렬하고 싶다면 쿼리 끝에 ORDER BY max(Population) DESC를 추가하면 최대값 기준 내림차순으로 정렬됩니다.
  • 특정 조건의 그룹만 조회하려면 HAVING 절을 함께 사용하세요.

이처럼 GROUP BY와 MAX()를 조합하면 복잡한 서브쿼리 없이도 간단하게 그룹별 최대값을 손쉽게 조회할 수 있습니다.