MySQL에서는 GROUP BY 절과 AVG() 함수를 함께 사용하면, 특정 VARCHAR(문자열) 값이 중복되는 경우 해당 값별로 숫자 컬럼의 평균을 손쉽게 계산할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable(
Value int,
Value2 varchar(100)
);
Query OK, 0 rows affected (0.84 sec)
2. 데이터 삽입하기
INSERT 명령으로 몇 개의 레코드를 추가합니다. 이때 '999.999.999.999' 값은 두 번 삽입되어 의도적으로 중복되도록 합니다.
mysql> insert into DemoTable values(10,'999.999.999.999');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(20,'888.888.888.888');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(30,'999.999.999.999');
Query OK, 1 row affected (0.09 sec)
3. 전체 레코드 확인하기
SELECT 문으로 테이블에 저장된 모든 데이터를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+-----------------+
| Value | Value2 |
+-------+-----------------+
| 10 | 999.999.999.999 |
| 20 | 888.888.888.888 |
| 30 | 999.999.999.999 |
+-------+-----------------+
3 rows in set (0.00 sec)
4. VARCHAR 값 기준으로 평균 구하기
VARCHAR 컬럼(Value2)을 기준으로 그룹화하여 숫자 컬럼(Value)의 평균을 구하는 쿼리는 다음과 같습니다.
mysql> select Value2,avg(Value) from DemoTable group by Value2;
결과는 다음과 같이 출력됩니다.
+-----------------+------------+
| Value2 | avg(Value) |
+-----------------+------------+
| 999.999.999.999 | 20.0000 |
| 888.888.888.888 | 20.0000 |
+-----------------+------------+
2 rows in set (0.06 sec)
결과 해석
'999.999.999.999' 값은 두 개의 레코드(10과 30)에 해당하므로 평균은 (10 + 30) / 2 = 20이 됩니다. '888.888.888.888'은 하나의 레코드(20)만 있으므로 평균 역시 20입니다.
이처럼 GROUP BY 절에 기준이 되는 VARCHAR 컬럼을 지정하고 AVG() 함수를 사용하면, 중복된 문자열 값별로 수치 데이터의 평균을 간단하게 집계할 수 있습니다.