집계 함수 - 여러 행(row)의 값을 하나의 결과값으로 요약해주는 함수
- 왜 사용하는 가?
- 수많은 데이터를 하나의 숫자나 지표로 축약하여 보여주기 위해
- 집계 함수의 종류
- 예시
아래와 같은 테이블이 있다고 가정하고 각 집계 함수별로 예시를 확인해 보자.
+----------+---------+--------+
| order_id | user_id | amount |
+----------+---------+--------+
| 101 | 1 | 100.00 |
| 102 | 1 | 150.00 |
| 103 | 2 | 200.00 |
| 104 | 3 | NULL |
+----------+---------+--------+
1. COUNT( ) - 행의 개수를 세어줌 (NULL 은 제외)
SELECT COUNT(*) AS total_orders FROM orders
출력 결과 :
total_orders |
4 |
2. SUM( ) - 컬럼의 총합
SELECT SUM(amount) AS total_amount FROM orders
출력 결과 :
total_amount |
450.00 |
3. AVG( ) - 컬럼의 평균
SELECT AVG(amount) AS avg_amount FROM orders
출력 결과 :
avg_amount |
150.00 |
4. MIN( ) / MAX( ) - 가장 작은 값 / 가장 큰 값
SELECT
MIN(amount) AS min_amt
MAX(amount) AS max_amt
FROM orders
출력 결과 :
min_amt | max_amt |
100.00 | 200.00 |
5. GROUP_CONCAT ( ) - 그룹별 문자열 연결
SELECT
user_id,
GROUP_CONCAT(order_id) AS order_list
FROM orders
GROUP BY user_id
출력 결과 :
user_id | order_list |
1 | 101,102 |
2 | 103 |
3 | 104 |
GROUP BY - 지정한 컬럼을 기준으로 데이터를 그룹화
- 왜 사용하는 가?
- 그룹별로 데이터를 요약하기 위해
- 사용자별 총 주문 금액은?, 지역별 평균 수입은? 같은 질문에 답하기 위해
HAVING - 그룹화된 데이터를 필터링
- 왜 사용하는 가?
- 그룹별 집계 결과에 조건을 걸기 위해
- 총 주문 금액이 200 이상인 사용자?, 평균 점수가 80점 이상인 학생? 같은 질문에 답하기 위해
- WHERE 과의 차이점
- WHERE 은 그룹(group) 묶기 전 필터링
- HAVING 은 그룹(group) 묶은 다음 필터링
- 예시
아래와 같은 테이블이 있다고 가정하고 각 집계 함수별로 예시를 확인해 보자.
+----------+---------+--------+
| order_id | user_id | amount |
+----------+---------+--------+
| 101 | 1 | 100.00 |
| 102 | 1 | 150.00 |
| 103 | 2 | 200.00 |
| 104 | 3 | NULL |
+----------+---------+--------+
1. 사용자별 총 주문 금액을 구해라
SELECT user_id, SUM(amount) AS total_amount
FROM orders
GROUP BY user_id
출력 결과 :
user_id | total_amount |
1 | 250.00 |
2 | 200.00 |
3 | NULL |
2. 총 주문 금액이 200 이상인 사용자만 보기
SELECT user_id, SUM(amount) AS total_amount
FROM orders
GROUP BY user_id
HAVING total_amount >= 200
출력 결과 :
user_id | total_amount |
1 | 250.00 |
2 | 200.00 |
3. 주문 횟수가 2회 이상인 사용자만 보기
SELECT user_id, COUNT(amount) AS order_count
FROM orders
GROUP BY user_id
HAVING order_count >= 2
출력 결과 :
user_id | order_count |
1 | 2 |
'SQL' 카테고리의 다른 글
ROWS & RANGE (feat. Window Function) - MySQL (5) | 2025.08.01 |
---|---|
Window Function (윈도우 함수) - MySQL (1) | 2025.07.29 |
Subquery (서브쿼리) - MySQL (1) | 2025.07.27 |
JOIN (조인) - MySQL (1) | 2025.07.23 |
데이터 분석 직무 코테 준비를 위한 SQL 공부 시작 (2) | 2025.07.22 |