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

MySQL에서 GROUP BY와 SUM() 함수로 특정 열의 중복 값 기준 레코드 합산하기

MySQL에서 중복 값 기준으로 레코드 합산하는 방법

MySQL에서 한 열에 중복된 값이 존재할 때, 해당 값들을 기준으로 다른 열의 숫자 데이터를 합산해야 하는 경우가 자주 발생합니다. 예를 들어 동일한 이름의 고객별 구매 금액을 모두 더하거나, 같은 카테고리의 재고 수량을 집계하는 상황이 대표적입니다.

이럴 때는 SUM() 집계 함수GROUP BY 절을 함께 사용하면 간단하게 해결할 수 있습니다.

1. 테이블 생성하기

먼저 실습에 사용할 테이블을 생성합니다. 이름(Name)과 값(Value) 두 개의 열로 구성된 테이블입니다.

mysql> create table DemoTable
-> (
-> Name varchar(20),
-> Value int
-> );
Query OK, 0 rows affected (2.08 sec)

2. 샘플 데이터 삽입하기

INSERT 명령문을 사용하여 테이블에 몇 개의 레코드를 추가합니다. 이때 'Chris'와 'David'는 의도적으로 중복되는 값을 넣습니다.

mysql> insert into DemoTable values('Chris',50);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('David',90);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Chris',60);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Bob',100);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('David',80);
Query OK, 1 row affected (0.21 sec)

3. 전체 레코드 조회하기

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select * from DemoTable;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+-------+-------+
| Name  | Value |
+-------+-------+
| Chris | 50    |
| David | 90    |
| Chris | 60    |
| Bob   | 100   |
| David | 80    |
+-------+-------+
5 rows in set (0.00 sec)

4. SUM()과 GROUP BY로 중복 값 기준 합산하기

이제 핵심인 쿼리를 살펴보겠습니다. Name 열을 GROUP BY로 그룹화하고, SUM() 함수로 Value 열의 합계를 계산합니다. 별칭(Alias)을 지정하여 결과 열의 이름도 알아보기 쉽게 만들었습니다.

mysql> select Name,sum(Value) as GrandTotal from DemoTable group by Name;

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

+-------+------------+
| Name  | GrandTotal |
+-------+------------+
| Chris |        110 |
| David |        170 |
| Bob   |        100 |
+-------+------------+
3 rows in set (0.03 sec)

결과 분석

출력 결과를 보면 중복되었던 레코드들이 하나로 묶여 합산된 것을 확인할 수 있습니다.

  • Chris: 50 + 60 = 110
  • David: 90 + 80 = 170
  • Bob: 단일 레코드이므로 100

이처럼 GROUP BY 절은 지정한 열의 고유한 값마다 하나의 그룹을 생성하고, SUM() 같은 집계 함수는 각 그룹에 속한 레코드들의 값을 계산합니다. COUNT(), AVG(), MAX(), MIN() 등 다른 집계 함수와도 조합하여 활용할 수 있으니 함께 익혀두면 유용합니다.