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

MySQL에서 고유 ID 개수로 Score 열 총계의 평균 구하는 방법

개요

MySQL에서 전체 점수의 합계를 고유 ID(중복을 제거한 ID)의 개수로 나누어 평균을 구해야 하는 경우가 있습니다. 이때는 DISTINCT 키워드와 COUNT() 함수를 함께 사용하면 간단하게 해결할 수 있습니다.

이 글에서는 예제 테이블을 만들고, 고유 ID 개수를 기준으로 Score 열의 총합에 대한 평균을 구하는 과정을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성하기

먼저 IdScore 두 개의 열을 가진 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Id int,
-> Score int
-> );
Query OK, 0 rows affected (0.95 sec)

2. 데이터 삽입하기

INSERT 명령을 사용하여 몇 개의 레코드를 추가합니다. 여기서는 ID가 중복되는 데이터를 의도적으로 넣었습니다.

mysql> insert into DemoTable values(10,90);
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable values(10,190);
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable values(11,230);
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable values(11,130);
Query OK, 1 row affected (0.17 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

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

+------+-------+
| Id   | Score |
+------+-------+
|   10 |    90 |
|   10 |   190 |
|   11 |   230 |
|   11 |   130 |
+------+-------+
4 rows in set (0.00 sec)

4. 고유 ID 개수로 평균 구하기

핵심 쿼리는 다음과 같습니다.

mysql> SELECT SUM(Score) / COUNT(DISTINCT Id) from DemoTable;

이 쿼리의 동작 원리를 살펴보겠습니다.

  • SUM(Score): Score 열 값 전체의 합계를 구합니다. 즉, 90 + 190 + 230 + 130 = 640
  • COUNT(DISTINCT Id): 중복을 제거한 고유 ID의 개수를 구합니다. 이 예제에서는 10과 11 두 개이므로 2

따라서 최종 결과는 640 ÷ 2 = 320이 됩니다.

+---------------------------------+
| SUM(Score) / COUNT(DISTINCT Id) |
+---------------------------------+
|                         320.0000 |
+---------------------------------+
1 row in set (0.00 sec)

정리

ID가 중복된 데이터가 있을 때 단순히 AVG() 함수를 사용하면 레코드 수 기준으로 평균이 계산되어 원하는 결과를 얻지 못할 수 있습니다. 이처럼 SUM()COUNT(DISTINCT ...)를 조합하면, 고유 ID 개수를 기준으로 한 정확한 평균값을 손쉽게 계산할 수 있습니다.