πŸ“ŒSQL 문법 - 집계 ν•¨μˆ˜(Aggregation Functions)와 데이터λ₯Ό μš”μ•½

데이터가 λ§Žμ„μˆ˜λ‘ 전체 λ‚΄μš©μ„ μš”μ•½ν•΄μ„œ νŒŒμ•…ν•˜λŠ” 게 μ€‘μš”ν•©λ‹ˆλ‹€. 이럴 λ•Œ μ‚¬μš©ν•˜λŠ” 것이 λ°”λ‘œ 집계 ν•¨μˆ˜(Aggregation Functions)! μ§‘κ³„ν•¨μˆ˜μ— λŒ€ν•΄ μ•Œμ•„λ΄…μ‹œλ‹€.
avatar
2025.04.07
Β·
7 min read

πŸ“Š 집계 ν•¨μˆ˜λ‘œ 데이터 μš”μ•½ν•˜κΈ°

데이터가 λ§Žμ„μˆ˜λ‘ 전체 λ‚΄μš©μ„ μš”μ•½ν•΄μ„œ νŒŒμ•…ν•˜λŠ” 게 μ€‘μš”ν•©λ‹ˆλ‹€.
이럴 λ•Œ μ‚¬μš©ν•˜λŠ” 것이 λ°”λ‘œ 집계 ν•¨μˆ˜(Aggregation Functions)!

이번 κΈ€μ—μ„œλŠ” SQLμ—μ„œ 자주 μ‚¬μš©ν•˜λŠ” 집계 ν•¨μˆ˜λ“€κ³Ό ν•¨κ»˜,
GROUP BY, HAVING μ ˆμ„ ν™œμš©ν•œ κ·Έλ£Ή λ‹¨μœ„ λΆ„μ„κΉŒμ§€ μ‰½κ²Œ μ„€λͺ…ν• κ²Œμš”.


βœ… 집계 ν•¨μˆ˜λž€?

집계 ν•¨μˆ˜λŠ” μ—¬λŸ¬ ν–‰(Row)을 μž…λ ₯λ°›μ•„ ν•˜λ‚˜μ˜ κ²°κ³Όκ°’μœΌλ‘œ μš”μ•½ν•΄μ£ΌλŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.
주둜 숫자 데이터λ₯Ό ν•©μ‚°ν•˜κ±°λ‚˜ 평균을 ꡬ할 λ•Œ μ‚¬μš©ν•΄μš”.


πŸ”’ μ£Όμš” 집계 ν•¨μˆ˜ μ’…λ₯˜

ν•¨μˆ˜

μ„€λͺ…

μ˜ˆμ‹œ

COUNT()

ν–‰μ˜ 개수 (NULL μ œμ™Έ)

COUNT(*), COUNT(column)

SUM()

총합

SUM(saleprice)

AVG()

평균

AVG(price)

MAX()

μ΅œλŒ€κ°’

MAX(price)

MIN()

μ΅œμ†Œκ°’

MIN(price)


πŸ§ͺ κΈ°λ³Έ μ‚¬μš© μ˜ˆμ‹œ

-- 전체 λ„μ„œ 개수
SELECT COUNT(*) FROM Book;

-- 고객 IDκ°€ 3인 μ‚¬λžŒμ˜ 총 ꡬ맀 κΈˆμ•‘
SELECT SUM(saleprice)
FROM Orders
WHERE custid = 3;

-- λ„μ„œ 평균 가격
SELECT AVG(price)
FROM Book;

-- κ°€μž₯ λΉ„μ‹Ό λ„μ„œ 가격
SELECT MAX(price) FROM Book;

πŸ”€ GROUP BY둜 그룹별 μš”μ•½

GROUP BY μ ˆμ€ 데이터λ₯Ό κ·Έλ£Ή λ‹¨μœ„λ‘œ λ¬Άμ–΄ 집계할 수 있게 ν•΄μ€λ‹ˆλ‹€.

-- 고객별 총 ꡬ맀 κΈˆμ•‘
SELECT custid, SUM(saleprice)
FROM Orders
GROUP BY custid;

β€’ GROUP BY 뒀에 μ˜€λŠ” 컬럼 κΈ°μ€€μœΌλ‘œ 그룹을 λ‚˜λˆ ,
β€’ 각 그룹에 λŒ€ν•΄ 집계 ν•¨μˆ˜κ°€ μ μš©λ©λ‹ˆλ‹€.


🎯 HAVING으둜 κ·Έλ£Ή 쑰건 μΆ”κ°€

β€’ WHEREλŠ” ν–‰ λ‹¨μœ„ 쑰건,
β€’ HAVING은 κ·Έλ£Ή λ‹¨μœ„ μ‘°κ±΄μž…λ‹ˆλ‹€.

-- 2회 이상 κ΅¬λ§€ν•œ 고객만 보기
SELECT custid, COUNT(*)
FROM Orders
GROUP BY custid
HAVING COUNT(*) >= 2;

πŸ” WHERE vs HAVING 차이

WHERE 절

HAVING 절

적용 μ‹œμ 

GROUP BY 이전

GROUP BY 이후

적용 λŒ€μƒ

κ°œλ³„ ν–‰(Row)

κ·Έλ£Ή(Group)

집계 ν•¨μˆ˜ μ‚¬μš©

❌ μ‚¬μš© λΆˆκ°€

βœ… μ‚¬μš© κ°€λŠ₯

μ‚¬μš© λͺ©μ 

μ›ν•˜λŠ” ν–‰ 필터링

μ›ν•˜λŠ” κ·Έλ£Ή 필터링

ν•¨κ»˜ μ“°λŠ” 절

SELECT, FROM, ORDER BY λ“±κ³Ό ν•¨κ»˜

GROUP BY와 ν•¨κ»˜ μ‚¬μš©


πŸ“¦ μ‹€μ „ 예제 λͺ¨μŒ

-- μΆœνŒμ‚¬λ³„ λ„μ„œ 평균 가격 κ΅¬ν•˜κΈ°
SELECT publisher, AVG(price) AS avg_price
FROM Book
GROUP BY publisher;

-- 평균 가격이 15,000원 이상인 μΆœνŒμ‚¬λ§Œ
SELECT publisher, AVG(price)
FROM Book
GROUP BY publisher
HAVING AVG(price) >= 15000;

-- 고객 이름 + 총 ꡬ맀 κΈˆμ•‘ 좜λ ₯
SELECT name, SUM(saleprice)
FROM Customer C, Orders O
WHERE C.custid = O.custid
GROUP BY name;

πŸ“Œ 정리 μš”μ•½

μ„€λͺ…

집계 ν•¨μˆ˜

μ—¬λŸ¬ 행을 ν•˜λ‚˜μ˜ κ°’μœΌλ‘œ μš”μ•½ (COUNT, SUM, AVG, MAX, MIN)

GROUP BY

νŠΉμ • 컬럼 κΈ°μ€€μœΌλ‘œ 데이터λ₯Ό λ¬Άμ–΄μ„œ 집계 μˆ˜ν–‰

HAVING

κ·Έλ£Ήν•‘λœ 결과에 쑰건 μΆ”κ°€ (HAVING COUNT(*) > 2 λ“±)

WHERE vs HAVING

WHEREλŠ” ν–‰ ν•„ν„° / HAVING은 κ·Έλ£Ή ν•„ν„°, 적용 μ‹œμ μ΄ 닀름

πŸ“˜ ν•™μŠ΅ 팁
β€’ SELECT에 μ—†λŠ” μ»¬λŸΌμ€ GROUP BY에 λ°˜λ“œμ‹œ 포함돼야 함
β€’ HAVING 없이 GROUP BY만 써도 집계 κ°€λŠ₯
β€’ COUNT(*) vs COUNT(column)의 차이도 κΌ­ κ΅¬λΆ„ν•˜μž!







- μ»¬λ ‰μ…˜ 아티클