MySQL에서는 GROUP BY 절과 집계 함수 SUM()을 함께 사용하면 특정 조건이나 기준에 따라 열의 합계를 손쉽게 구할 수 있습니다. 이번 글에서는 예제 테이블을 만들고, ProductId의 십의 자리 숫자를 기준으로 가격 합계를 그룹화하여 조회하는 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성하기
먼저 테이블을 생성합니다.
mysql> create table DemoTable1489
-> (
-> ProductId int,
-> ProductPrice int
-> );
Query OK, 0 rows affected (0.49 sec)2. 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable1489 values(100,900); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable1489 values(115,1000); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable1489 values(119,2100); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable1489 values(125,2100); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable1489 values(128,2900); Query OK, 1 row affected (0.25 sec)
3. 전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1489;
실행 결과는 다음과 같습니다.
+-----------+--------------+ | ProductId | ProductPrice | +-----------+--------------+ | 100 | 900 | | 115 | 1000 | | 119 | 2100 | | 125 | 2100 | | 128 | 2900 | +-----------+--------------+ 5 rows in set (0.00 sec)
4. 조건에 따라 합계 구하기
이제 ProductId div 10, 즉 ProductId를 10으로 나눈 몫을 기준으로 그룹화하여 각 그룹의 가격 합계를 구하는 쿼리입니다.
mysql> select ProductId div 10,sum(ProductPrice) from DemoTable1489
-> group by ProductId div 10;실행 결과는 다음과 같습니다.
+------------------+-------------------+ | ProductId div 10 | sum(ProductPrice) | +------------------+-------------------+ | 10 | 900 | | 11 | 3100 | | 12 | 5000 | +------------------+-------------------+ 3 rows in set (0.00 sec)
결과 해석
DIV 연산자는 정수 나눗셈의 몫을 반환합니다. 따라서 ProductId가 100인 상품은 10 그룹에, 115와 119는 11 그룹에, 125와 128은 12 그룹에 속하게 됩니다.
- 그룹 10: 900 (상품 ID 100)
- 그룹 11: 1000 + 2100 = 3100 (상품 ID 115, 119)
- 그룹 12: 2100 + 2900 = 5000 (상품 ID 125, 128)
이처럼 GROUP BY와 SUM()을 조합하면 원하는 조건·기준별로 데이터를 집계할 수 있습니다. 실무에서는 날짜, 카테고리, 지역 등 다양한 컬럼을 기준으로 응용할 수 있으니 참고하세요.