MySQL에서 평균의 평균(Average of Average) 구하기
단일 행(row)에 여러 열(column)의 값이 저장되어 있을 때, 이 값들을 모두 반영한 전체 평균을 한 번의 쿼리로 계산할 수 있습니다. MySQL에서는 집계 함수 AVG()를 활용하면 되는데, 핵심은 각 행의 모든 열 값을 더한 뒤 AVG()를 적용하고, 마지막에 열 개수로 나누는 것입니다.
1. 테이블 생성
먼저 세 개의 정수형 열을 가진 테이블을 생성합니다.
mysql> create table DemoTable
(
Value1 int,
Value2 int,
Value3 int
);
Query OK, 0 rows affected (0.54 sec)2. 데이터 삽입
INSERT 명령을 사용하여 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable values(10,20,30); Query OK, 1 row affected (0.30 sec) mysql> insert into DemoTable values(13,15,18); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable values(21,31,41); Query OK, 1 row affected (0.21 sec)
3. 데이터 확인
SELECT 명령으로 저장된 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------+--------+--------+ | Value1 | Value2 | Value3 | +--------+--------+--------+ | 10 | 20 | 30 | | 13 | 15 | 18 | | 21 | 31 | 41 | +--------+--------+--------+ 3 rows in set (0.00 sec)
4. 평균의 평균을 구하는 쿼리
다음 쿼리를 사용하면 단일 행 결과로 전체 평균을 구할 수 있습니다.
mysql> select avg(Value1+Value2+Value3)/3.0 from DemoTable;
실행 결과는 다음과 같습니다.
+-------------------------------+ | avg(Value1+Value2+Value3)/3.0 | +-------------------------------+ | 22.11111111 | +-------------------------------+ 1 row in set (0.00 sec)
쿼리 동작 원리
avg(Value1+Value2+Value3)는 각 행에서 세 열의 합을 먼저 구한 후, 그 합들의 평균을 계산합니다. 위 예제에서는 각 행의 합이 60, 46, 93이므로 (60 + 46 + 93) / 3 = 66.33이 되고, 여기서 다시 3.0으로 나누면 최종적으로 약 22.11이라는 전체 평균값이 도출됩니다.
또한 3.0처럼 소수점 형태의 숫자로 나누면 정수 나눗셈이 아닌 실수 나눗셈이 수행되기 때문에, 소수점 이하까지 포함한 더 정확한 결과를 얻을 수 있다는 점도 기억해 두면 좋습니다.