데이터베이스 작업 중에는 동일한 ID가 여러 번 나타나는 행들의 값을 하나로 합산해야 하는 경우가 자주 발생합니다. MySQL에서는 집계 함수 SUM()을 사용하면 이러한 작업을 손쉽게 처리할 수 있습니다. 지금부터 예제를 통해 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 실습에 사용할 테이블을 만들어 보겠습니다.
mysql> create table DemoTable850(
Id int,
Price int
);
Query OK, 0 rows affected (0.54 sec)
2. 데이터 삽입
INSERT 명령을 사용해 테이블에 샘플 데이터를 입력합니다. 여기서는 ID 1과 2가 각각 여러 번 반복되도록 구성했습니다.
mysql> insert into DemoTable850 values(1,90);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable850 values(2,100);
Query OK, 1 row affected (0.55 sec)
mysql> insert into DemoTable850 values(2,50);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable850 values(1,80);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable850 values(1,60);
Query OK, 1 row affected (0.10 sec)
3. 저장된 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable850;
실행 결과는 다음과 같습니다.
+------+-------+
| Id | Price |
+------+-------+
| 1 | 90 |
| 2 | 100 |
| 2 | 50 |
| 1 | 80 |
| 1 | 60 |
+------+-------+
5 rows in set (0.00 sec)
ID 1은 세 번, ID 2는 두 번 반복되어 저장된 것을 확인할 수 있습니다.
4. 특정 ID의 행 합산하기
반복되는 ID를 가진 행의 값을 합산하려면 아래와 같이 WHERE 절과 함께 SUM() 함수를 사용하면 됩니다.
mysql> select Id,SUM(Price) from DemoTable850 where Id=1;
실행 결과는 다음과 같습니다.
+------+------------+
| Id | SUM(Price) |
+------+------------+
| 1 | 230 |
+------+------------+
1 row in set (0.00 sec)
ID가 1인 행들의 Price 값(90 + 80 + 60)이 모두 더해져 230이라는 결과가 반환되었습니다.
5. GROUP BY로 모든 ID별 합산하기
특정 ID 하나가 아니라 테이블에 있는 모든 ID별로 합계를 한 번에 구하고 싶다면 GROUP BY 절을 활용하는 것이 좋습니다.
mysql> select Id,SUM(Price) from DemoTable850 group by Id;
실행 결과는 다음과 같습니다.
+------+------------+
| Id | SUM(Price) |
+------+------------+
| 1 | 230 |
| 2 | 150 |
+------+------------+
2 rows in set (0.00 sec)
이처럼 GROUP BY를 사용하면 각 ID별로 반복되는 행의 합계를 한 번의 쿼리로 깔끔하게 얻을 수 있습니다.