MySQL에서 그룹별 합계 계산하기
MySQL에서 데이터를 특정 기준으로 묶은 다음 각 그룹의 합계를 구하려면 집계 함수인 SUM()과 GROUP BY 절을 함께 사용하면 됩니다. 이 글에서는 예제 테이블을 만들고, 제품명별로 수량×가격의 합계를 계산하는 과정을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 제품명, 수량, 가격을 저장할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> ProductName varchar(20),
-> ProductQuantity int,
-> ProductPrice int
-> );
Query OK, 0 rows affected (0.63 sec)
2. 샘플 데이터 삽입
INSERT 명령으로 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('Product-1',2,50);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Product-2',3,80);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Product-2',4,100);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Product-1',4,150);
Query OK, 1 row affected (0.11 sec)3. 전체 데이터 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------------+-----------------+--------------+
| ProductName | ProductQuantity | ProductPrice |
+-------------+-----------------+--------------+
| Product-1 | 2 | 50 |
| Product-2 | 3 | 80 |
| Product-2 | 4 | 100 |
| Product-1 | 4 | 150 |
+-------------+-----------------+--------------+
4 rows in set (0.00 sec)
4. GROUP BY와 SUM()으로 그룹별 합계 조회
이제 제품명(ProductName)을 기준으로 그룹화하고, 수량과 가격을 곱한 값의 합계를 구하는 쿼리를 실행합니다.
mysql> select *,sum(ProductQuantity*ProductPrice) as Total from DemoTable
-> group by ProductName;
실행 결과는 다음과 같습니다.
+-------------+-----------------+--------------+-------+
| ProductName | ProductQuantity | ProductPrice | Total |
+-------------+-----------------+--------------+-------+
| Product-1 | 2 | 50 | 700 |
| Product-2 | 3 | 80 | 640 |
+-------------+-----------------+--------------+-------+
2 rows in set (0.00 sec)
결과 분석
위 결과에서 Total 값이 어떻게 계산되었는지 살펴보겠습니다.
- Product-1: (2 × 50) + (4 × 150) = 100 + 600 = 700
- Product-2: (3 × 80) + (4 × 100) = 240 + 400 = 640
즉, SUM(ProductQuantity*ProductPrice)는 각 행의 수량과 가격을 곱한 값을 제품명별로 모두 더한 결과입니다.
참고 사항
SELECT *를 GROUP BY와 함께 사용하면, 집계 함수에 포함되지 않은 컬럼(여기서는 ProductQuantity, ProductPrice)의 값은 해당 그룹의 첫 번째 행 기준으로 표시됩니다. MySQL 5.7 이상에서는 기본적으로 ONLY_FULL_GROUP_BY SQL 모드가 활성화되어 있어, 이런 방식의 쿼리가 오류를 일으킬 수 있습니다. 안전하게 사용하려면 GROUP BY에 지정된 컬럼만 선택하거나, ANY_VALUE() 함수 또는 MIN()/MAX() 같은 집계 함수를 활용하는 것이 좋습니다.