프로그래밍/MySQL

📊 [SQL 프로젝트] 제19장 GROUP BY와 AVG - 그룹별 평균 계산하기

강릉바다의 블로그 2026. 7. 2. 11:22

제19장 GROUP BY와 AVG - 그룹별 평균 계산하기


📚 집계 함수 활용 시리즈

① COUNT
② SUM
③ AVG   ← 현재
④ MIN / MAX
⑤ 여러 집계 함수를 함께 사용하기

지금까지는 개수(COUNT)와 합계(SUM)를 계산했습니다.

이번 장에서는 평균값(AVG) 을 이용하여 데이터를 비교하는 방법을 배워 보겠습니다.


오늘의 질문

상품관리팀에서 다음과 같이 질문했습니다.

"어느 카테고리의 상품 가격이 가장 비싼가요?"

 

잠시 생각해 보면

단순히 가격의 합계(SUM) 만으로는 판단하기 어렵습니다.

예를 들어

카테고리 상품 수 가격 합계
A 20개 1,000
B 5개 600

합계만 보면 A가 더 큽니다.

하지만

평균을 계산하면

카테고리 평균 가격
A 50
B 120

오히려 B의 상품이 더 비쌉니다.

이처럼 전체 규모보다 '평균'을 비교해야 하는 경우가 매우 많습니다.


학습 목표

이번 장을 학습하면 다음 내용을 할 수 있습니다.

  • AVG() 함수의 역할을 설명할 수 있다.
  • GROUP BY와 함께 평균을 계산할 수 있다.
  • HAVING으로 평균 조건을 지정할 수 있다.
  • 평균과 합계의 차이를 이해할 수 있다.

19-1. AVG()란 무엇일까요?

AVG()는

여러 행의 숫자 값을 모두 더한 후

개수로 나누어 평균을 계산하는 집계 함수입니다.

예를 들어

가격
10
20
30

이라면

(10 + 20 + 30) ÷ 3
↓
20

이 됩니다.


먼저 실행해 봅시다.

SELECT AVG(Price)
FROM Products;

실행 결과(예)

AVG(Price)
28.87

Products 테이블의 평균 상품 가격을 계산했습니다.


잠깐 생각해 보기

지난 장에서는

SELECT SUM(Price)
FROM Products;

를 사용했습니다.

전체 가격의 합계

이번에는

SELECT AVG(Price)
FROM Products;

평균 가격

즉,

SUM은 모두 더하고

AVG는 평균을 계산합니다.


19-2. GROUP BY와 함께 사용하기

이번에는

카테고리별 평균 가격을 계산해 보겠습니다.

SELECT CategoryID,
       AVG(Price) AS AveragePrice
FROM Products
GROUP BY CategoryID;

실행 결과(예)

CategoryID AveragePrice
1 37.13
2 22.48
3 45.91
... ...

각 카테고리의 평균 가격이 계산되었습니다.


SQL을 한 줄씩 읽어 보기

SELECT CategoryID,
       AVG(Price) AS AveragePrice
FROM Products
GROUP BY CategoryID;
SELECT CategoryID

카테고리를 표시합니다.

AVG(Price)

평균 가격을 계산합니다.

FROM Products

Products 테이블에서 데이터를 가져옵니다.

GROUP BY CategoryID

같은 카테고리끼리 묶습니다.

즉,

카테고리별 평균 가격을 계산하라.

라는 의미입니다.


19-3. SUM과 AVG를 비교해 봅시다.

다음 SQL을 비교해 보세요.

합계 계산

SELECT CategoryID,
       SUM(Price)
FROM Products
GROUP BY CategoryID;

가격을 모두 더합니다.


평균 계산

SELECT CategoryID,
       AVG(Price)
FROM Products
GROUP BY CategoryID;

가격의 평균을 계산합니다.


언제 SUM을 사용하고 언제 AVG를 사용할까요?

상황 사용하는 함수
총매출 SUM()
총주문수량 SUM()
평균 상품 가격 AVG()
평균 시험 점수 AVG()

19-4. HAVING과 함께 사용하기

평균 가격이 높은 카테고리만 출력해 보겠습니다.

SELECT CategoryID,
       AVG(Price) AS AveragePrice
FROM Products
GROUP BY CategoryID
HAVING AVG(Price) >= 30;

평균 가격이 30 이상인 카테고리만 출력됩니다.


19-5. ORDER BY와 함께 사용하기

SELECT CategoryID,
       AVG(Price) AS AveragePrice
FROM Products
GROUP BY CategoryID
ORDER BY AveragePrice DESC;

평균 가격이 높은 카테고리부터 출력됩니다.

실무에서는

GROUP BY

AVG()

ORDER BY

조합을 자주 사용합니다.


💡 잠깐! 이것도 알아두세요

평균은

극단적으로 큰 값이나 작은 값의 영향을 받을 수 있습니다.

예를 들어

10
10
10
200

평균은

57.5

입니다.

하지만 대부분의 값은 10입니다.

따라서 평균을 해석할 때는

데이터의 분포도 함께 살펴보는 것이 좋습니다.


학생들이 가장 많이 하는 실수

① SUM과 AVG를 혼동한다.

SUM()

↓

모두 더하기

AVG()

↓

평균 계산하기

② 문자 데이터를 AVG()에 사용한다.

잘못된 예

SELECT AVG(ProductName)
FROM Products;

AVG는 숫자 데이터에서만 사용할 수 있습니다.


③ GROUP BY를 빼먹는다.

SELECT CategoryID,
       AVG(Price)
FROM Products;

카테고리별 평균을 계산하려면

반드시

GROUP BY CategoryID;

가 필요합니다.


④ HAVING 대신 WHERE를 사용한다.

WHERE AVG(Price) >= 30

잘못된 사용입니다.

집계 함수는 HAVING에서 사용합니다.


실무에서는 어떻게 사용할까요?

회사에서는 AVG를 이용하여

  • 카테고리별 평균 가격
  • 직원별 평균 주문 금액
  • 월평균 매출
  • 고객 평균 구매 금액
  • 학생 평균 성적

등을 계산합니다.

평균은 성과를 비교하거나 수준을 분석할 때 매우 많이 사용됩니다.


실습

실습 1

Products 테이블의 평균 가격을 계산하세요.

SELECT AVG(Price)
FROM Products;

실습 2

카테고리별 평균 가격을 계산하세요.

SELECT CategoryID,
       AVG(Price)
FROM Products
GROUP BY CategoryID;

실습 3

평균 가격이 30 이상인 카테고리만 조회하세요.

SELECT CategoryID,
       AVG(Price) AS AveragePrice
FROM Products
GROUP BY CategoryID
HAVING AVG(Price) >= 30;

실무 미션

당신은 상품관리팀 직원입니다.

팀장님이 다음과 같이 요청했습니다.

"카테고리별 평균 상품 가격을 계산하고,

평균 가격이 높은 순으로 정렬해 주세요."

 

다음 항목을 출력하세요.

  • CategoryID
  • 평균 가격
  • 평균 가격이 높은 순으로 정렬

힌트)

AVG(), GROUP BY, ORDER BY를 함께 사용합니다.


핵심 정리

✔ AVG()는 숫자 데이터의 평균을 계산하는 집계 함수이다.

✔ GROUP BY와 함께 사용하면 그룹별 평균을 계산할 수 있다.

✔ HAVING으로 평균 조건을 지정할 수 있다.

✔ SUM()은 합계, AVG()는 평균을 계산한다.


연습 문제

기본 문제

  1. AVG() 함수의 역할을 설명하세요.
  2. SUM()과 AVG()의 차이를 설명하세요.
  3. AVG()는 어떤 데이터에서 사용할 수 있나요?

응용 문제

  1. Products 테이블에서 CategoryID별 평균 가격을 구하는 SQL을 작성하세요.
  2. 평균 가격이 40 이상인 카테고리만 출력하는 SQL을 작성하세요.
  3. 평균 가격이 높은 순으로 정렬하는 SQL을 작성하세요.

도전 문제

Products 테이블에서 카테고리별로

  • 상품 개수
  • 가격 합계
  • 평균 가격

한 번의 SQL로 출력해 보세요.


다음 장 예고

이번 장에서는 평균(AVG) 을 이용하여 그룹별 평균을 계산하는 방법을 배웠습니다.

하지만 실무에서는 평균뿐 아니라

"가장 비싼 상품은 무엇인가요?"

"가장 저렴한 상품은 무엇인가요?"

처럼 최고값과 최저값을 찾는 경우도 매우 많습니다.

다음 장에서는 MAX()와 MIN() 함수를 이용하여 가장 큰 값과 가장 작은 값을 찾는 방법을 배워 보겠습니다.