SQL 그룹 함수와 GROUP BY, HAVING 절 정리
SQL에서 그룹 함수(집계 함수)는 대량의 데이터를 요약하거나 통계로 분석할 때 필수 도구입니다. GROUP BY와 HAVING 절과 함께 사용하면 더욱 강력한 쿼리를 구성할 수 있습니다.
📊 1. 그룹 함수란?
| 함수 | 설명 |
|---|---|
COUNT() |
레코드 수를 셈 |
MIN() |
가장 작은 값 |
MAX() |
가장 큰 값 |
SUM() |
총합 계산 |
AVG() |
평균 계산 |
-- 전체 예약 수 계산
SELECT COUNT(*) AS TotalReservations FROM Reservation;
-- 고유 고객 수 계산
SELECT COUNT(DISTINCT Name) AS UniqueNames FROM Reservation;
🔍 2. MIN() / MAX() 예제
-- 고객 중 최소 나이
SELECT MIN(Age) AS MinAge FROM Customer;
-- 고객 이름 중 사전순 가장 뒤
SELECT MAX(Name) AS MaxName FROM Customer;
➕ 3. SUM(), AVG() 예제
-- 고객 나이 총합
SELECT SUM(Age) AS TotalAge FROM Customer;
-- 고객 평균 나이
SELECT AVG(Age) AS AverageAge FROM Customer;
📂 4. GROUP BY – 그룹별 집계
GROUP BY는 특정 필드를 기준으로 데이터를 그룹화하고, 각 그룹에 대해 집계함수를 적용합니다.
-- 나이별 고객 수
SELECT Age, COUNT(*) AS CustomerCount
FROM Customer
GROUP BY Age;
-- 도시별 평균 나이
SELECT Address, AVG(Age) AS AvgAge
FROM Customer
GROUP BY Address;
⚙️ 5. HAVING – 그룹 조건 필터링
HAVING 절은 GROUP BY 이후 집계된 데이터에 조건을 부여합니다.
(⚠ WHERE은 그룹화 전에, HAVING은 그룹화 후 조건 적용)
-- 도시별 고객 수가 10명 초과인 경우만 표시
SELECT Address, COUNT(*) AS CustomerCount
FROM Customer
GROUP BY Address
HAVING CustomerCount > 10;
-- 도시별 최대 나이가 15세 이상인 경우만 출력
SELECT Address, MAX(Age) AS MaxAge
FROM Customer
GROUP BY Address
HAVING MaxAge >= 15;
🧠 정리 요약
| 절/함수 | 설명 |
|---|---|
GROUP BY |
데이터를 그룹화 (같은 값 기준 묶음) |
HAVING |
그룹화된 결과에 조건 적용 |
COUNT() |
그룹 내 항목 수 계산 |
SUM() |
그룹 내 값 합계 |
AVG() |
그룹 내 평균값 |
MIN() |
그룹 내 최소값 |
MAX() |
그룹 내 최대값 |
질문 정리
Q1. WHERE와 HAVING의 차이점은?
WHERE: GROUP BY 이전, 개별 레코드 필터링HAVING: GROUP BY 이후, 집계 결과 필터링
Q2. GROUP BY 없이 COUNT() 사용할 수 있나요?
네, GROUP BY 없이도 전체 수를 집계할 수 있습니다:
SELECT COUNT(*) FROM Customer;
Q3. 여러 필드를 기준으로 그룹화할 수 있나요?
SELECT Address, Gender, COUNT(*) AS Count
FROM Customer
GROUP BY Address, Gender;
→ 주소 + 성별 조합별로 그룹화합니다.
댓글남기기