SQLite | SQLite 함수 | 컬럼 값의 평균값 구하기 (avg 함수)

avg 함수를 사용하면 지정된 열에 저장된 값의 평균을 구할 수 있다. 여기에서는 avg 함수의 사용법에 대해 설명한다.

avg 함수 사용법

avg 함수는 값의 평균을 얻기 위해 사용한다. 형식은 다음과 같다.

avg(컬럼명)

인수에 지정된 컬럼에 저장된 값 중에 NULL이 아닌 값의 평균을 반환한다. 만약 대상의 컬럼 값이 NULL 만 있다면 avg 함수는 NULL을 반환한다. GROUP BY 절을 사용하면 그룹마다 평균이 계산된다.

또한 지정한 컬럼에 문자열이 저장된 경우에 숫자로 변환할 수 없는 문자열은 0으로 계산한다.

그러면 실습으로 평균값을 구해 보겠다. 먼저 다음과 같이 테이블을 만든다.

create table user (name text, point integer, gender text);
sqlite> create table user (name text, point integer, gender text);
sqlite> 

INSERT 문을 사용하여 다음과 같이 데이터를 추가한다.

insert into user values ('dekuma', 72, 'Man');
insert into user values ('kimkc', 94, 'Woman');
insert into user values ('araikuma', 58, 'Woman');
insert into user values ('happykuma', 82, 'Man');
sqlite> insert into user values ('dekuma', 72, 'Man');
sqlite> insert into user values ('kimkc', 94, 'Woman');
sqlite> insert into user values ('araikuma', 58, 'Woman');
sqlite> insert into user values ('happykuma', 82, 'Man');
sqlite> 

그러면 avg 함수를 사용하여 point 컬럼 값의 평균을 구한다.

select avg(point) from user;
sqlite> .mode column
sqlite> .header on
sqlite> 
sqlite> select avg(point) from user;
avg(point)
----------
76.5      
sqlite> 

컬럼에 있는 값의 평균은 (72 + 94 + 58 + 82) ÷ 4 = 76.5를 구할 수 있었다.

다음 gender 컬럼마다 그룹화하여 평균을 구해 본다.

select gender, avg(point) from user group by gender;
sqlite> select gender, avg(point) from user group by gender;
gender      avg(point)
----------  ----------
Man         77.0      
Woman       76.0      
sqlite> 

GROUP BY 절을 사용하여 그룹화한 경우에는 그룹 단위로 평균을 계산한다. man 내용은 (72 + 82) ÷ 2 = 77, woman 내용은 (94 + 58) ÷ 2 = 76을 각각 구할 수 있었다. (Group By 절에 대해서는 “데이터를 그룹화하여 합계와 평균을 계산 (GROUP BY 절, HAVING 절)“를 참조한다.)

평균을 계산하는 컬럼에 NULL 및 문자열이 저장된 경우

지정한 컬럼에 NULL이 포함된 경우에는 그 데이터는 제외하고 계산이 이루어 진다. 다음과 같이 데이터를 추가하여 해보도록 하자.

insert into user values ('raccoon', NULL, 'Man');
sqlite> insert into user values ('raccoon', NULL, 'Man');
sqlite> 
sqlite> select * from user;
name        point       gender    
----------  ----------  ----------
dekuma      72          Man       
kimkc       94          Woman     
araikuma    58          Woman     
happykuma   82          Man       
raccoon                 Man       
sqlite> 

그러면 avg 함수를 사용하여 point 컬럼 값의 평균을 구해 본다.

select avg(point) from user;
sqlite> select avg(point) from user;
avg(point)
----------
76.5      
sqlite> 

NULL이 들어가 있는 데이터는 제외되므로 평균은 (72 + 94 + 58 + 82) ÷ 4 = 76.5이다.

다음은 지장한 컬럼에 숫자로 변환할 수 없는 문자열이 저장된 경우에는 값은 0으로 계산된다. 다음과 같이 데이터를 추가하여 해보도록 하자.

insert into user values ('mykuma', 'NODATA', 'Woman');
sqlite> insert into user values ('mykuma', 'NODATA', 'Woman');
sqlite> 
sqlite> select * from user;
name        point       gender    
----------  ----------  ----------
dekuma      72          Man       
kimkc       94          Woman     
araikuma    58          Woman     
happykuma   82          Man       
raccoon                 Man       
mykuma      NODATA      Woman     
sqlite> 

그러면 avg 함수를 사용하여 point 컬럼 값의 평균을 구한다.

select avg(point) from user;
sqlite> select avg(point) from user;
avg(point)
----------
61.2      
sqlite> 

숫자로 변환할 수 없는 문자열이 들어있는 데이터는 0으로 계산되므로 평균은 (72 + 94 + 58 + 82 + 0) ÷ 5 = 61.2이다. 제외되는 것이 아니라 0으로 계산되기 때문에 평균이 떨어지는 점을 주의하자.




최종 수정 : 2019-11-13