MySQL에서 GROUP BY 절과 AVG() 함수를 함께 사용하면, 동일한 ID를 가진 여러 행의 값에 대한 평균을 손쉽게 계산할 수 있습니다. 이번 글에서는 학생 ID별 시험 점수 평균을 구하는 실전 예제를 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
StudentId int,
StudentMarks int
);
Query OK, 0 rows affected (0.83 sec)StudentId(학생 ID)와 StudentMarks(점수) 두 개의 컬럼으로 구성된 간단한 테이블입니다.
2. 샘플 데이터 삽입
INSERT 문을 사용하여 테이블에 레코드를 추가합니다. 여기서는 의도적으로 같은 학생 ID가 여러 번 등장하도록 데이터를 구성했습니다.
mysql> insert into DemoTable values(1000,78); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(1001,88); Query OK, 1 row affected (0.21 sec) mysql> insert into DemoTable values(1000,89); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(1000,67); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(1000,90); Query OK, 1 row affected (0.21 sec) mysql> insert into DemoTable values(1001,91); Query OK, 1 row affected (0.17 sec)
3. 저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+--------------+ | StudentId | StudentMarks | +-----------+--------------+ | 1000 | 78 | | 1001 | 88 | | 1000 | 89 | | 1000 | 67 | | 1000 | 90 | | 1001 | 91 | +-----------+--------------+ 6 rows in set (0.00 sec)
학생 ID 1000은 4개의 행, 1001은 2개의 행을 가지고 있는 것을 확인할 수 있습니다.
4. ID별 평균을 구하는 쿼리
동일한 ID를 가진 행들의 평균을 구하려면 GROUP BY로 ID를 묶은 뒤 AVG() 함수를 적용하면 됩니다.
mysql> select StudentId,avg(StudentMarks) from DemoTable group by StudentId;
실행 결과는 다음과 같습니다.
+-----------+-------------------+ | StudentId | avg(StudentMarks) | +-----------+-------------------+ | 1000 | 81.0000 | | 1001 | 89.5000 | +-----------+-------------------+ 2 rows in set (0.03 sec)
결과 해석
- 학생 ID 1000: (78 + 89 + 67 + 90) ÷ 4 = 81.0000
- 학생 ID 1001: (88 + 91) ÷ 2 = 89.5000
이처럼 GROUP BY 절이 StudentId를 기준으로 행들을 그룹화하고, AVG() 함수가 각 그룹 내 점수의 평균을 계산합니다. 만약 소수점 자릿수를 조정하고 싶다면 ROUND(AVG(StudentMarks), 2)와 같이 ROUND 함수를 함께 사용하면 됩니다.