C.W.K.
Stream
Lesson 14 of 16 · published

HAVING: 집계 후 필터

~10 min · queries, aggregation

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

WHERE 가 행 필터; HAVING 이 그룹 필터

WHERE 가 row-level — 그룹핑 실행. HAVING 이 group-level — 집계 실행. 둘이 행복하게 공존: WHERE 가 GROUP BY 입력 좁힘; HAVING 이 출력 좁힘.

외울 실행 파이프라인

FROM / JOIN     →  raw 결합 행
WHERE           →  개별 행 필터
GROUP BY        →  그룹으로 collapse
HAVING          →  그룹 필터
SELECT          →  컬럼 고르기, 계산, alias
ORDER BY        →  정렬
LIMIT / OFFSET  →  출력 cap

이 순서가 '왜 내 쿼리 안 됨' 모든 질문 설명. Aggregate 가 WHERE 에 못 나옴 — WHERE 시점에 aggregate 존재 안 함. SELECT 에 정의된 alias 가 WHERE 에 못 쓰임 — SELECT 가 WHERE 후 실행.

Code

WHERE + HAVING 함께·sql
SELECT u.name,
       COUNT(o.id)  AS order_count,
       SUM(o.total) AS total_spent
FROM   users u
JOIN   orders o ON o.user_id = u.id
WHERE  o.status = 'paid'              -- 행 필터
GROUP  BY u.name
HAVING COUNT(o.id) >= 3                -- 그룹 필터
   AND SUM(o.total) > 500;
다중 조건 HAVING·sql
-- 평균 3 별 미만이지만 리뷰 5 개 이상인 product
SELECT p.title,
       COUNT(r.id)            AS review_count,
       ROUND(AVG(r.rating), 2) AS avg_rating
FROM   products p
JOIN   reviews r ON r.product_id = p.id
GROUP  BY p.title
HAVING AVG(r.rating) < 3 AND COUNT(r.id) >= 5
ORDER  BY avg_rating;

External links

Exercise

WHERE, GROUP BY, HAVING, ORDER BY, LIMIT — 다섯 — 다 있는 쿼리: 완료된 주문 기준 top 10 고객 by total spend, 5+ 주문 한 고객으로 제한.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.