프로그래밍/MySQL

📊 [SQL 프로젝트] 제18장 GROUP BY와 SUM - 그룹별 합계 계산하기

강릉바다의 블로그 2026. 7. 1. 12:38

제18장 GROUP BY와 SUM - 그룹별 합계 계산하기

오늘의 질문

지난 장에서는 국가별 고객 수를 계산하고,

조건에 맞는 그룹만 선택하는 HAVING을 배웠습니다.

이번에는 영업팀에서 다음과 같은 요청이 들어왔습니다.

"카테고리별 상품 가격의 총합을 알고 싶습니다."

 

또는

"직원별로 처리한 주문 수량의 합계를 계산해 주세요."

 

이처럼 여러 행의 값을 모두 더해야 하는 경우가 많습니다.

이때 사용하는 집계 함수가 바로 SUM()입니다.

하지만 이번 장의 핵심은 단순히 SUM()을 사용하는 것이 아니라,

GROUP BY와 함께 사용하여 그룹별 합계를 계산하는 방법을 배우는 것입니다.


학습 목표

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

  • SUM() 함수의 역할을 설명할 수 있다.
  • GROUP BY와 함께 그룹별 합계를 계산할 수 있다.
  • SUM()과 HAVING을 함께 사용할 수 있다.
  • 실제 업무에서 합계 데이터를 분석할 수 있다.

18-1. SUM()은 무엇일까요?

SUM()은

여러 행의 숫자 값을 모두 더하는 집계 함수입니다.

예를 들어

상품 가격
A 10
B 20
C 30

이라면

SUM(가격)
↓
60

이 됩니다.


먼저 실행해 봅시다.

SELECT SUM(Price)
FROM Products;

실행 결과(예)

SUM(Price)
2222.71

Products 테이블에 있는 모든 상품 가격을 더한 결과입니다.


잠깐 생각해 보기

지난 장에서

SELECT COUNT(*)
FROM Products;

상품 개수를 계산했습니다.

이번에는

SELECT SUM(Price)
FROM Products;

를 사용하여

상품 가격의 총합을 계산합니다.

즉,

COUNT는 개수를 세고, SUM은 값을 더합니다.


18-2. GROUP BY와 함께 사용해 봅시다.

이번에는

전체 가격이 아니라

카테고리별 가격 합계를 계산해 보겠습니다.

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

실행 결과(예)

CategoryID TotalPrice
1 148.50
2 238.10
3 415.00
... ...

각 카테고리에 속한 상품 가격을 모두 더했습니다.


SQL을 한 줄씩 읽어 보기

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

카테고리를 표시합니다.

SUM(Price)

가격을 모두 더합니다.

FROM Products

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

GROUP BY CategoryID

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

즉,

카테고리별 상품 가격의 총합을 계산하라.

라는 의미입니다.


18-3. HAVING과 함께 사용하기

합계를 계산한 후

조건을 적용할 수도 있습니다.

SELECT CategoryID,
       SUM(Price) AS TotalPrice
FROM Products
GROUP BY CategoryID
HAVING SUM(Price) >= 300;

가격 합계가 300 이상인 카테고리만 출력됩니다.


18-4. ORDER BY도 함께 사용할 수 있습니다.

SELECT CategoryID,
       SUM(Price) AS TotalPrice
FROM Products
GROUP BY CategoryID
ORDER BY TotalPrice DESC;

합계가 큰 카테고리부터 출력됩니다.

실무에서는

GROUP BY

SUM()

ORDER BY

조합을 매우 자주 사용합니다.


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

SUM()은

숫자 데이터를 더하는 함수입니다.

따라서

다음과 같은 열에서 주로 사용합니다.

  • 가격(Price)
  • 수량(Quantity)
  • 금액(Amount)
  • 점수(Score)

문자(Text)를 더할 수는 없습니다.


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

① 문자 데이터를 SUM()에 사용한다.

잘못된 예

SELECT SUM(ProductName)
FROM Products;

SUM()은 숫자 데이터만 계산할 수 있습니다.


② GROUP BY를 빼먹는다.

SELECT CategoryID,
       SUM(Price)
FROM Products;

카테고리별 합계를 계산하려면

반드시

GROUP BY CategoryID

가 필요합니다.


③ COUNT와 SUM을 혼동한다.

COUNT()
↓
개수
SUM()
↓
합계

④ HAVING 대신 WHERE를 사용한다.

잘못된 예

WHERE SUM(Price) >= 300

집계 함수는

HAVING에서 사용합니다.


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

회사에서는

SUM()을 이용하여

  • 상품별 판매 금액
  • 직원별 매출
  • 고객별 주문 금액
  • 월별 매출
  • 지역별 판매액

등을 계산합니다.

경영 보고서에서 가장 많이 사용하는 집계 함수 중 하나입니다.


실습

실습 1

Products 테이블의 전체 상품 가격 합계를 계산하세요.

SELECT SUM(Price)
FROM Products;

실습 2

카테고리별 상품 가격 합계를 계산하세요.

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

실습 3

가격 합계가 300 이상인 카테고리를 조회하세요.

SELECT CategoryID,
       SUM(Price) AS TotalPrice
FROM Products
GROUP BY CategoryID
HAVING SUM(Price) >= 300;

실무 미션

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

팀장님이

"카테고리별 상품 가격의 총합을 계산하고,

가격 합계가 높은 순으로 정렬해 주세요."

라고 요청했습니다.

다음 항목을 출력하세요.

  • CategoryID
  • 가격 합계
  • 합계가 큰 순으로 정렬

힌트)

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


핵심 정리

✔ SUM()은 숫자 데이터를 모두 더하는 집계 함수이다.

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

✔ HAVING을 사용하면 합계 조건을 지정할 수 있다.

✔ ORDER BY를 사용하면 합계 기준으로 정렬할 수 있다.


연습 문제

기본 문제

  1. SUM() 함수의 역할을 설명하세요.
  2. COUNT()와 SUM()의 차이를 설명하세요.
  3. SUM()은 어떤 종류의 데이터에 사용할 수 있나요?

응용 문제

  1. Products 테이블에서 CategoryID별 가격 합계를 구하는 SQL을 작성하세요.
  2. 가격 합계가 200 이상인 CategoryID만 출력하는 SQL을 작성하세요.
  3. CategoryID별 가격 합계를 큰 순으로 정렬하는 SQL을 작성하세요.

도전 문제

Products 테이블에서

카테고리별로

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

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

(힌트 : COUNT(), SUM(), AVG()를 함께 사용합니다.)


다음 장 예고

이번 장에서는 그룹별 합계(SUM)를 계산하는 방법을 배웠습니다.

하지만 합계만으로는 데이터를 정확하게 비교하기 어려운 경우가 많습니다.

예를 들어

"카테고리별 평균 가격은 얼마인가요?"

"직원 한 명당 평균 주문 수는 얼마인가요?"

처럼 평균값이 더 중요한 상황도 많습니다.

다음 장에서는 AVG() 함수를 이용하여 그룹별 평균을 계산하는 방법을 배워 보겠습니다.