MySQL에서 GROUP BY 절은 특정 컬럼의 값이 동일한 행들을 하나의 그룹으로 묶어주는 강력한 기능입니다. 주로 SUM, COUNT, AVG 같은 집계 함수와 함께 사용되어 그룹별 통계를 손쉽게 구할 수 있습니다.
이번 글에서는 예제 테이블을 직접 만들고, GROUP BY를 활용해 과목(Subject)별 가격(Price) 합계를 조회하는 전체 과정을 단계별로 살펴보겠습니다.
1단계: 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다. Id 컬럼은 자동 증가(AUTO_INCREMENT) 기본키로 설정했습니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Subject varchar(20),
Price int
);
Query OK, 0 rows affected (0.64 sec)
2단계: 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 샘플 데이터를 넣어보겠습니다. 의도적으로 같은 과목명이 중복되도록 입력했습니다.
mysql> insert into DemoTable(Subject,Price) values('MySQL',456);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(Subject,Price) values('MySQL',456);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(Subject,Price) values('MongoDB',56);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(Subject,Price) values('MongoDB',60);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Subject,Price) values('Java',100);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(Subject,Price) values('Java',130);
Query OK, 1 row affected (0.15 sec)3단계: 전체 데이터 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
+----+---------+-------+
| Id | Subject | Price |
+----+---------+-------+
| 1 | MySQL | 456 |
| 2 | MySQL | 456 |
| 3 | MongoDB | 56 |
| 4 | MongoDB | 60 |
| 5 | Java | 100 |
| 6 | Java | 130 |
+----+---------+-------+
6 rows in set (0.00 sec)
현재 각 과목별로 여러 개의 행이 존재합니다. 이 상태에서 과목별 가격 합계를 한눈에 보려면 GROUP BY가 필요합니다.
4단계: GROUP BY로 행 그룹화하기
다음은 GROUP BY 절을 사용해 Subject 컬럼을 기준으로 행을 묶고, SUM 함수로 Price의 합계를 구하는 쿼리입니다. AS 키워드를 사용해 결과 컬럼에 'Total'이라는 별칭을 지정했습니다.
mysql> select sum(Price) AS Total, Subject from DemoTable group by Subject;
출력 결과
+-------+---------+
| Total | Subject |
+-------+---------+
| 912 | MySQL |
| 116 | MongoDB |
| 230 | Java |
+-------+---------+
3 rows in set (0.04 sec)
결과 해석
GROUP BY를 적용한 결과, 원래 6개의 행이 과목별로 3개의 그룹으로 정리되었습니다.
- MySQL: 456 + 456 = 912
- MongoDB: 56 + 60 = 116
- Java: 100 + 130 = 230
이처럼 GROUP BY는 동일한 값을 가진 행들을 하나의 그룹으로 묶고, 집계 함수를 통해 그룹 단위의 요약 정보를 제공합니다. 판매 데이터 집계, 카테고리별 통계, 일별 매출 분석 등 실무에서 매우 자주 활용되는 필수 문법이니 꼭 익혀두시기 바랍니다.