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

MySQL에서 다른 열의 고유 값별로 합계 구하는 방법 – SUM()과 GROUP BY 완벽 정리

MySQL에서 특정 열의 고유(distinct) 값별로 다른 열의 합계를 구하려면 집계 함수인 SUM()GROUP BY 절을 함께 사용하면 됩니다. 이 조합은 그룹별 통계를 낼 때 가장 기본이 되면서도 강력한 기법입니다.

1. 예제 테이블 생성하기

먼저 개념을 이해하기 위해 간단한 테이블을 만들어 보겠습니다. 아래 쿼리로 테이블을 생성합니다.

mysql> create table SumOfEveryDistinct
-> (
-> Id int not null,
-> Amount int
-> );
Query OK, 0 rows affected (0.59 sec)

2. 샘플 데이터 삽입하기

INSERT 문을 사용해 테이블에 레코드를 추가합니다. 의도적으로 Id 값(10, 11, 12)을 반복해서 입력했습니다.

mysql> insert into SumOfEveryDistinct values(10,100);
Query OK, 1 row affected (0.19 sec)
mysql> insert into SumOfEveryDistinct values(11,200);
Query OK, 1 row affected (0.20 sec)
mysql> insert into SumOfEveryDistinct values(12,300);
Query OK, 1 row affected (0.14 sec)
mysql> insert into SumOfEveryDistinct values(10,400);
Query OK, 1 row affected (0.20 sec)
mysql> insert into SumOfEveryDistinct values(11,500);
Query OK, 1 row affected (0.10 sec)
mysql> insert into SumOfEveryDistinct values(12,600);
Query OK, 1 row affected (0.13 sec)
mysql> insert into SumOfEveryDistinct values(10,700);
Query OK, 1 row affected (0.10 sec)
mysql> insert into SumOfEveryDistinct values(11,800);
Query OK, 1 row affected (0.18 sec)
mysql> insert into SumOfEveryDistinct values(12,900);
Query OK, 1 row affected (0.19 sec)

3. 전체 데이터 확인하기

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

mysql> select *from SumOfEveryDistinct;

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

+----+--------+
| Id | Amount |
+----+--------+
| 10 | 100 |
| 11 | 200 |
| 12 | 300 |
| 10 | 400 |
| 11 | 500 |
| 12 | 600 |
| 10 | 700 |
| 11 | 800 |
| 12 | 900 |
+----+--------+
9 rows in set (0.00 sec)

4. GROUP BY로 고유 값별 합계 구하기

이제 핵심 쿼리입니다. GROUP BY로 Id 값을 그룹화하고, 각 그룹의 Amount 합계를 SUM()으로 계산합니다.

mysql> select Id, sum(Amount) as TotalSum from SumOfEveryDistinct
-> group by Id;

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

+----+----------+
| Id | TotalSum |
+----+----------+
| 10 | 1200 |
| 11 | 1500 |
| 12 | 1800 |
+----+----------+
3 rows in set (0.00 sec)

결과 해석

  • Id = 10: 100 + 400 + 700 = 1200
  • Id = 11: 200 + 500 + 800 = 1500
  • Id = 12: 300 + 600 + 900 = 1800

이처럼 SUM()GROUP BY를 함께 사용하면 반복되는 값들을 하나의 그룹으로 묶어 그룹별 합계를 손쉽게 얻을 수 있습니다. 별칭(alias)인 TotalSum을 지정하면 결과 컬럼명이 더 직관적이어서 가독성도 좋아집니다. 이 패턴은 매출 집계, 로그 분석 등 실무에서 매우 자주 활용되는 기본기이니 꼭 익혀두시길 권장합니다.