PostgreSQL집계

GROUP BY와 HAVING

행 하나씩이 아니라 묶음 단위로 집계하고, 집계 결과에 조건을 거는 PostgreSQL 기본 패턴입니다.

마지막 수정 2026년 3월 19일

기본 패턴

text
SELECT column, COUNT(*)
FROM table_name
GROUP BY column
HAVING COUNT(*) > 1;

설명

  • GROUP BY는 여러 행을 기준 열 값에 따라 묶습니다.
  • COUNT, SUM, AVG 같은 집계 함수는 묶인 단위에 대해 계산됩니다.
  • WHERE는 묶기 전 행을 걸러내고, HAVING은 집계가 끝난 뒤 그룹을 걸러냅니다.
  • 따라서 "집계 결과가 어떤 조건을 만족하는 그룹만 보기"에는 HAVING이 필요합니다.

짧은 예제

text
SELECT user_id, COUNT(*) AS post_count
FROM posts
GROUP BY user_id
HAVING COUNT(*) >= 5;

빠른 정리

시점
WHERE그룹화 전
GROUP BY행 묶기
집계 함수그룹별 계산
HAVING그룹화 후 필터

공식 참고: Aggregate Functions

주의할 점

WHERE COUNT(*) > 1처럼 집계 함수를 WHERE에 바로 쓰면 의도대로 동작하지 않습니다. 집계 이후 조건은 HAVING으로 생각하는 습관이 중요합니다.