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

MySQL에서 GROUP BY로 그룹화한 뒤 SUM()으로 합계 구하는 방법

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() 같은 집계 함수를 활용하는 것이 좋습니다.