제15장 집계 함수(Aggregate Functions) - 여러 행을 한 번에 계산하기
오늘의 질문
사장님이 상품 목록을 보다가 갑자기 질문했습니다.
"우리 상품은 모두 몇 개입니까?"
잠시 후 또 질문합니다.
"평균 가격은 얼마인가요?"
그리고 마지막으로 이렇게 말합니다.
"가장 비싼 상품과 가장 저렴한 상품도 알려 주세요."
상품을 하나씩 계산하는 것은 시간이 너무 오래 걸립니다.
이처럼 여러 행(Row)을 한 번에 계산하는 함수를 집계 함수(Aggregate Functions)라고 합니다.
학습 목표
이번 장을 학습하면 다음 내용을 할 수 있습니다.
- 집계 함수의 역할을 설명할 수 있다.
- COUNT(), SUM(), AVG()를 사용할 수 있다.
- MIN(), MAX()를 사용할 수 있다.
- 집계 함수와 일반 함수의 차이를 이해할 수 있다.
- 실무에서 집계 함수를 활용할 수 있다.
15-1. 집계 함수란 무엇일까요?
생각해 봅시다.
지금까지 배운 함수는
한 행(Row)을 계산했습니다.
예를 들어
UPPER(CustomerName)
은
고객 한 명마다 계산합니다.
하지만
COUNT(*)
는
모든 고객을 한 번에 계산합니다.
즉,
집계 함수는
여러 행을 하나의 결과로 요약하는 함수입니다.
🤔 왜 집계 함수가 필요할까요?
회사는
상품 하나보다
전체 현황을 더 자주 확인합니다.
예를 들면
- 고객 수
- 주문 수
- 평균 가격
- 최고 가격
- 최저 가격
등입니다.
이런 계산은 집계 함수가 가장 잘합니다.
15-2. COUNT() - 개수 세기
다음 SQL을 실행해 보세요.
SELECT COUNT(*)
FROM Customers;
실행 결과(예)
| COUNT(*) |
| 91 |
Customers 테이블의 전체 고객 수를 계산합니다.
이번에는 상품 개수를 구해 보겠습니다.
SELECT COUNT(*)
FROM Products;
15-3. SUM() - 모두 더하기
SELECT SUM(Price)
FROM Products;
모든 상품 가격을 더한 결과가 출력됩니다.
실무에서는
매출 합계 등을 계산할 때 자주 사용합니다.
15-4. AVG() - 평균 구하기
SELECT AVG(Price)
FROM Products;
상품 가격의 평균을 계산합니다.
15-5. MIN() - 가장 작은 값
SELECT MIN(Price)
FROM Products;
가장 저렴한 상품 가격을 구합니다.
15-6. MAX() - 가장 큰 값
SELECT MAX(Price)
FROM Products;
가장 비싼 상품 가격을 구합니다.
잠깐 생각해 보기
다음 SQL은
SELECT AVG(Price)
FROM Products;
상품이 77개여도
결과는
한 개만 출력됩니다.
왜 그럴까요?
↓
집계 함수는
여러 행을
하나의 결과로 요약하기 때문입니다.
🤔 COUNT(*)와 COUNT(열이름)은 무엇이 다를까요?
다음 두 SQL을 비교해 보세요.
SELECT COUNT(*)
FROM Customers;
↓
모든 행의 개수
SELECT COUNT(Fax)
FROM Customers;
↓
Fax 값이 있는 행만 계산
NULL은 세지 않습니다.
이 차이는 실무에서 매우 중요합니다.
💡 잠깐! 이것도 알아두세요
집계 함수는
NULL을 자동으로 제외하는 경우가 많습니다.
예를 들어
AVG(Price)
는
NULL 가격은 평균 계산에 포함하지 않습니다.
학생들이 가장 많이 하는 실수
① COUNT(*)와 COUNT(열)을 같은 기능이라고 생각한다.
COUNT(*)
↓
모든 행
COUNT(열)
↓
NULL 제외
② AVG()가 합계를 구한다고 생각한다.
AVG()
↓
평균
SUM()
↓
합계
③ MIN()이 가장 짧은 문자열이라고 생각한다.
MIN()은
자료형에 따라 가장 작은 값을 반환합니다.
④ 집계 함수가 여러 결과를 출력한다고 생각한다.
집계 함수는
보통 하나의 결과를 반환합니다.
실무에서는 어떻게 사용할까요?
회사에서는 집계 함수를 이용하여
- 고객 수 계산
- 주문 건수 확인
- 평균 판매 가격
- 최고 매출
- 최저 재고
등을 계산합니다.
거의 모든 보고서에서 사용됩니다.
실습
실습 1
고객 수를 계산하세요.
SELECT COUNT(*)
FROM Customers;
실습 2
상품 평균 가격을 계산하세요.
SELECT AVG(Price)
FROM Products;
실습 3
가장 비싼 상품 가격을 조회하세요.
SELECT MAX(Price)
FROM Products;
실무 미션
당신은 회계팀 직원입니다.
팀장님이 다음 정보를 요청했습니다.
- 상품 개수
- 평균 가격
- 최고 가격
- 최저 가격
Products 테이블에서 한 번에 조회하는 SQL을 작성해 보세요.
힌트)
집계 함수는 여러 개를 동시에 사용할 수 있습니다.
핵심 정리
✔ 집계 함수는 여러 행을 하나의 결과로 계산한다.
✔ COUNT()는 개수를 센다.
✔ SUM()은 합계를 계산한다.
✔ AVG()는 평균을 계산한다.
✔ MIN()은 가장 작은 값을 찾는다.
✔ MAX()는 가장 큰 값을 찾는다.
"한 행을 계산하는 함수 vs 여러 행을 계산하는 함수"
| 종류 | 계산 대상 | 결과 개수 |
| UPPER(CustomerName) | 고객 한 명 | 고객 수만큼 |
| ROUND(Price) | 상품 하나 | 상품 수만큼 |
| YEAR(OrderDate) | 주문 한 건 | 주문 수만큼 |
| COUNT(*) | 전체 행 | 1개 |
| AVG(Price) | 전체 행 | 1개 |
연습 문제
기본 문제
- 집계 함수는 무엇을 계산하나요?
- COUNT(*)와 COUNT(열)의 차이를 설명해 보세요.
- AVG()와 SUM()의 차이를 설명해 보세요.
응용 문제
- Products 테이블에서 상품 개수를 계산하는 SQL을 작성하세요.
- Products 테이블에서 가격 합계를 계산하는 SQL을 작성하세요.
- Products 테이블에서 가장 저렴한 가격을 조회하는 SQL을 작성하세요.
도전 문제
Products 테이블에서 다음 결과를 한 번의 SQL로 출력하세요.
- 상품 개수
- 평균 가격
- 가장 저렴한 가격
- 가장 비싼 가격
다음 장 예고
이번 장에서는 집계 함수를 이용하여 여러 행의 데이터를 하나의 결과로 계산하는 방법을 배웠습니다.
하지만 회사에서는 전체 평균보다 국가별 고객 수, 카테고리별 상품 수, 직원별 주문 건수처럼 그룹별 통계를 훨씬 자주 사용합니다.
예를 들어 팀장님이 이렇게 요청할 수 있습니다.
"국가별 고객 수를 알려 주세요."
"카테고리별 평균 가격을 계산해 주세요."
이처럼 같은 값을 가진 행들을 하나의 그룹으로 묶어 계산하는 기능이 바로 GROUP BY입니다.
다음 장에서는 SQL에서 가장 중요한 문법 가운데 하나인 GROUP BY를 배우며, 진짜 보고서를 만드는 첫걸음을 시작하게 됩니다.
'프로그래밍 > MySQL' 카테고리의 다른 글
| 📊 [SQL 프로젝트] 제14장 날짜 함수(Date Functions) - 날짜와 시간을 자유롭게 다루기 (0) | 2026.06.30 |
|---|---|
| 📊 [SQL 프로젝트] 제13장 숫자 함수(Numeric Functions) - 숫자를 계산하고 원하는 형태로 바꾸기 (0) | 2026.06.29 |
| 📊 [SQL 프로젝트] 제12장 문자열 함수(String Functions) - 글자를 원하는 형태로 바꾸기 (0) | 2026.06.29 |
| 📊 [SQL 프로젝트] 제11장 BETWEEN - 일정 범위의 데이터 찾기 (0) | 2026.06.29 |
| 📊 [SQL 프로젝트] 제9장 LIKE - 원하는 글자가 포함된 데이터 찾기 (0) | 2026.06.29 |