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

MySQL GROUP BY와 SUM으로 중복 레코드 값 합산하기

데이터베이스 작업을 하다 보면 같은 이름이나 키가 여러 번 등장하는 중복 레코드를 자주 만나게 됩니다. 예를 들어 학생별 시험 점수가 여러 행으로 저장되어 있을 때, 학생 이름별로 점수를 하나로 합쳐야 하는 경우가 있죠. 이럴 때 GROUP BY 절과 SUM() 집계 함수를 함께 사용하면 간단하게 해결할 수 있습니다.

1. 예제 테이블 생성

먼저 실습에 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable
    -> (
    -> StudentName varchar(20),
    -> StudentMarks int
    -> );
Query OK, 0 rows affected (0.68 sec)

2. 데이터 삽입

INSERT 명령으로 몇 개의 레코드를 추가합니다. Chris와 David의 이름이 각각 두 번씩 등록되어 있다는 점에 주목하세요.

mysql> insert into DemoTable values('Chris',50);
Query OK, 1 row affected (0.61 sec)
mysql> insert into DemoTable values('David',70);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values('Chris',80);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('David',90);
Query OK, 1 row affected (0.24 sec)

3. 전체 레코드 확인

SELECT 문으로 테이블의 모든 데이터를 조회합니다.

mysql> select * from DemoTable;

실행 결과는 다음과 같습니다.

+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris       |           50 |
| David       |           70 |
| Chris       |           80 |
| David       |           90 |
+-------------+--------------+
4 rows in set (0.00 sec)

4. 중복 레코드 합산하기

이제 핵심 단계입니다. GROUP BY로 학생 이름을 기준으로 그룹화하고, SUM()으로 각 그룹의 점수 합계를 계산합니다.

mysql> select StudentName,sum(StudentMarks) from DemoTable group by StudentName;

결과는 다음과 같습니다.

+-------------+-------------------+
| StudentName | sum(StudentMarks) |
+-------------+-------------------+
| Chris       |               130 |
| David       |               160 |
+-------------+-------------------+
2 rows in set (0.00 sec)

결과 해석

Chris의 점수(50 + 80)는 130, David의 점수(70 + 90)는 160으로, 중복된 이름별로 점수가 깔끔하게 합산되어 출력되었습니다.

추가 팁

  • 합계 대신 평균이 필요하다면 SUM() 대신 AVG() 함수를 사용하면 됩니다.
  • 결과 열 이름을 더 읽기 좋게 바꾸려면 별칭(alias)을 활용하세요. 예: sum(StudentMarks) AS TotalMarks
  • 특정 조건에 맞는 데이터만 합산하려면 WHERE 절을, 그룹화된 결과에 조건을 적용하려면 HAVING 절을 사용할 수 있습니다.