집계 함수입문

AVG

숫자 컬럼의 평균값을 반환하는 함수 (NULL은 분모/분자에서 제외)

정의

숫자 컬럼의 평균을 구한다. NULL은 자동으로 빠진다. 즉 10, NULL, 30의 평균은 (10+30)/2 = 20이지 (10+0+30)/3이 아니다. NULL을 0으로 취급해서 평균을 내려면 AVG(COALESCE(x, 0)) 처럼 명시해줘야 한다.

왜 중요한가?

AVG가 NULL을 어떻게 다루는지 모르면 통계가 어긋난다. 설문에서 응답 안 한 사람을 0점으로 볼지, 아예 평균에서 빼버릴지는 비즈니스가 정해야 하는데 AVG 한 줄에 의도가 가려져 버린다.

틀리기 쉬운 포인트

  • !AVG는 NULL을 분모에서 제외합니다. SUM(x)/COUNT(x)이지 SUM(x)/COUNT(*)이 아닙니다.
  • !NULL을 0으로 취급한 평균을 원하면 AVG(COALESCE(x, 0))으로 명시.
  • !정수 나눗셈으로 인한 정밀도 손실에 주의(오라클은 자동으로 NUMBER 처리).

예시

SELECT dept_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept_id;
SELECT AVG(COALESCE(bonus, 0))
FROM employees;

성능 포인트

!AVG는 내부적으로 SUMCOUNT를 모두 계산. 둘 다 필요하다면 한 번에 같이 SELECT하는 것이 효율적.

관련 개념

관련 문제 풀어보기

관련 카테고리