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

MySQL에서 중복 ID별 최대값 구하기 – GROUP BY와 MAX() 함수 활용법

중복된 ID가 존재하는 테이블에서 각 ID별로 최대값을 구하려면 GROUP BY 절과 MAX() 함수를 함께 사용하면 됩니다. GROUP BY로 중복 ID를 하나의 그룹으로 묶고, MAX() 함수로 각 그룹의 컬럼별 최대값을 집계할 수 있습니다. 아래에서 단계별로 살펴보겠습니다.

1. 테이블 생성

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

mysql> create table DemoTable1804
    (
    Id int,
    Marks1 int,
    Marks2 int,
    Marks3 int
    );
Query OK, 0 rows affected (0.00 sec)

2. 데이터 삽입

insert 명령을 사용해 테이블에 레코드를 추가합니다. 일부 컬럼에는 의도적으로 NULL 값이 포함되어 있습니다.

mysql> insert into DemoTable1804 values(1,56,89,34);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1804 values(1,98,null,94);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1804 values(2,34,45,78);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1804 values(2,null,67,null);
Query OK, 1 row affected (0.00 sec)

3. 전체 데이터 확인

select 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable1804;

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

+------+--------+--------+--------+
| Id   | Marks1 | Marks2 | Marks3 |
+------+--------+--------+--------+
|    1 |     56 |     89 |     34 |
|    1 |     98 |   NULL |     94 |
|    2 |     34 |     45 |     78 |
|    2 |   NULL |     67 |   NULL |
+------+--------+--------+--------+
4 rows in set (0.00 sec)

위 결과에서 Id 1과 Id 2가 각각 두 번씩 중복되어 저장되어 있는 것을 확인할 수 있습니다.

4. 중복 행 병합 및 최대값 조회 쿼리

중복된 행을 하나로 합치면서 각 컬럼의 최대값을 구하는 쿼리는 다음과 같습니다.

mysql> select Id,max(Marks1),max(Marks2),max(Marks3)
    from DemoTable1804
    group by Id;

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

+------+-------------+-------------+-------------+
| Id   | max(Marks1) | max(Marks2) | max(Marks3) |
+------+-------------+-------------+-------------+
|    1 |          98 |          89 |          94 |
|    2 |          34 |          67 |          78 |
+------+-------------+-------------+-------------+
2 rows in set (0.00 sec)

결과 분석

GROUP BY 절이 Id를 기준으로 중복 행을 하나의 그룹으로 묶어주고, MAX() 함수가 각 그룹에서 컬럼별 최대값을 반환합니다. 참고로 MAX() 함수는 NULL 값을 자동으로 무시하므로, Id 1의 Marks2는 NULL이 아닌 89로, Id 2의 Marks1은 NULL이 아닌 34로 정상적으로 집계됩니다. 이처럼 GROUP BY와 MAX()를 조합하면 중복 데이터를 효율적으로 정리하면서 원하는 최대값을 손쉽게 얻을 수 있습니다.