개요
테이블에 여러 개의 값이 저장되어 있을 때, 전체가 아닌 특정 개수의 값만으로 평균을 계산해야 하는 경우가 있습니다. 예를 들어 5개의 값이 있는 열에서 처음 3개 값의 평균만 구하고 싶다면 서브쿼리(subquery)와 LIMIT 절을 함께 사용하면 됩니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Score int
);
Query OK, 0 rows affected (0.62 sec)2. 데이터 삽입하기
INSERT 명령어를 사용해 총 5개의 레코드를 삽입합니다.
mysql> insert into DemoTable values(80); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(45); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(55); Query OK, 1 row affected (0.33 sec) mysql> insert into DemoTable values(78); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable values(88); Query OK, 1 row affected (0.13 sec)
3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+ | Score | +-------+ | 80 | | 45 | | 55 | | 78 | | 88 | +-------+ 5 rows in set (0.00 sec)
4. 처음 3개 값의 평균 구하기
아래 쿼리는 열의 처음 3개 값만으로 평균을 계산하는 방법입니다. 서브쿼리 안에서 LIMIT 3을 사용해 상위 3개 레코드만 선택한 뒤, 바깥쪽 쿼리에서 AVG() 함수로 평균을 구합니다.
mysql> select avg(Score) from ( select Score from DemoTable limit 3) tbl;
실행 결과는 다음과 같습니다.
+------------+ | avg(Score) | +------------+ | 60.0000 | +------------+ 1 row in set (0.00 sec)
결과 해석
처음 3개 값인 80, 45, 55의 평균은 (80 + 45 + 55) ÷ 3 = 60.0000입니다. 나머지 값인 78과 88은 평균 계산에 포함되지 않았습니다.
참고 사항
LIMIT 절은 ORDER BY 절 없이 사용할 경우 반환되는 행의 순서가 보장되지 않을 수 있습니다. 따라서 실무에서는 특정 기준(예: ID 순서, 입력 순서 등)에 따라 정확한 '처음 3개' 값을 얻으려면 서브쿼리에 ORDER BY 절을 함께 추가하는 것이 좋습니다.