MySQL에서 레코드를 특정 기준에 따라 묶고 싶을 때는 GROUP BY 절을 사용하고, 각 그룹의 값을 더할 때는 SUM() 함수를 사용합니다. 이 글에서는 과목(Subject)별로 점수(Marks)를 그룹화하고 합산하는 방법을 예제와 함께 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 학생 이름(Name), 과목(Subject), 점수(Marks)를 저장할 테이블을 생성합니다.
mysql> create table DemoTable
(
Name varchar(40),
Subject varchar(40),
Marks int
);
Query OK, 0 rows affected (2.89 sec)2. 샘플 데이터 삽입
INSERT 명령을 사용해 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable values('Chris','MySQL',76);
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values('Sam','MongoDB',86);
Query OK, 1 row affected (0.39 sec)
mysql> insert into DemoTable values('Mike','MySQL',98);
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable values('David','Java',93);
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values('Bob','MySQL',57);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('John','MongoDB',77);
Query OK, 1 row affected (0.17 sec)3. 전체 데이터 조회
SELECT 문을 사용해 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+-------+---------+-------+ | Name | Subject | Marks | +-------+---------+-------+ | Chris | MySQL | 76 | | Sam | MongoDB | 86 | | Mike | MySQL | 98 | | David | Java | 93 | | Bob | MySQL | 57 | | John | MongoDB | 77 | +-------+---------+-------+ 6 rows in set (0.00 sec)
4. 과목별 점수 합계 구하기
이제 GROUP BY 절로 과목(Subject)을 기준으로 레코드를 그룹화한 뒤, SUM() 함수로 각 그룹의 점수 합계를 계산합니다.
mysql> select Subject,SUM(Marks) from DemoTable group by Subject;
실행 결과는 다음과 같습니다.
+---------+------------+ | Subject | SUM(Marks) | +---------+------------+ | MySQL | 231 | | MongoDB | 163 | | Java | 93 | +---------+------------+ 3 rows in set (0.00 sec)
결과 해석
출력 결과를 보면 MySQL 과목은 76 + 98 + 57 = 231점, MongoDB 과목은 86 + 77 = 163점, Java 과목은 93점으로 집계된 것을 확인할 수 있습니다. 이처럼 GROUP BY와 SUM()을 함께 사용하면 카테고리별 통계를 손쉽게 산출할 수 있으며, 매출 집계, 로그 분석 등 다양한 실무 상황에서 활용됩니다.