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

MySQL에서 동일한 ID를 가진 행들의 평균값 구하기

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 함수를 함께 사용하면 됩니다.