조건마다 다른 집계를 원할 때는 SUM(CASE WHEN ...)이 정답이다
페이지 정보

영삼이
본문
✅ 조건마다 다른 집계를 원할 때는 SUM(CASE WHEN ...)
이 정답이다
하나의 쿼리로 여러 조건을 동시에 집계하라
❌ 조건별로 쿼리를 나눠서 실행하는 경우
-- 상태가 paid인 주문 수
SELECT COUNT(*) FROM orders WHERE status = 'paid';
-- 상태가 pending인 주문 수
SELECT COUNT(*) FROM orders WHERE status = 'pending';
-
쿼리를 여러 번 실행해야 함
-
결과를 합치려면 별도 로직 필요
✅ 하나의 쿼리로 조건별 집계 처리
SELECT
COUNT(*) AS total,
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid_count,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending_count
FROM orders;
-
조건마다 다른 집계값을 동시에 출력
-
쿼리 1번으로 원하는 데이터 모두 확보
활용도 높은 패턴
-
상태별 수량, 카테고리별 합계
-
특정 날짜 범위 조건
-
조건별 평균, 최대값 등도 가능
✔️ 조건이 많을수록 쿼리를 나누지 말고
SUM(CASE WHEN ...)
을 활용해 하나로 처리하라.
성능과 유지보수성 모두 좋아진다.
- 이전글HAVING은 집계 이후 필터링이다 — WHERE와 역할이 다르다 25.03.28
- 다음글DISTINCT는 만능이 아니다 — GROUP BY로 대체하는 게 더 유리할 때가 있다 25.03.28
댓글목록
등록된 댓글이 없습니다.