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으로 계산되기 때문에 평균이 떨어지는 점을 주의하자.