1 분 소요

SQL에서 그룹 함수(집계 함수)는 대량의 데이터를 요약하거나 통계로 분석할 때 필수 도구입니다. GROUP BYHAVING 절과 함께 사용하면 더욱 강력한 쿼리를 구성할 수 있습니다.


📊 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. WHEREHAVING의 차이점은?

  • 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;

→ 주소 + 성별 조합별로 그룹화합니다.

카테고리:

업데이트:

댓글남기기