3-5 연습 문제 — 그룹을 거르는 조건,
HAVING 세 문제로 굳히기
강의를 본 것만으로는 안 남습니다 — 직접 짜본 SQL만 머리에 남아요. WHERE 와 HAVING 의 차이, WHERE → GROUP BY → HAVING 실행 순서, 그리고 집계 함수 조건은 HAVING — 방금 배운 세 가지를 손으로 확인합니다.
막히면 2-4에서 만든 AI 과외 선생님 세션에 먼저 물어보세요 — 단, 정답이 아니라 힌트만 요청하기. 그리고 다 푼 뒤에는 본인 SQL과 결과를 던지고 “이 결과가 맞는지 검증해줘” 라고 물어보세요. 검증하는 습관이 이 강의의 최종 목표입니다.
지금 어디까지 왔나
완료 ✓
완료 ✓
지금 여기
다음 강의
CASE·서브쿼리
풀기 전에 — 30초 복습
이번 강의에서 배운 것 한 줄 요약 — 집계 함수에 거는 조건은 무조건 HAVING 입니다.
WHERE 는 그룹 묶기 전
WHERE AVG(price) >= 30000 — 에러. WHERE 는 행을 하나씩 거르는 단계라, 아직 그룹이 없어서 평균을 알 수 없습니다.
HAVING 은 그룹 묶은 후
HAVING AVG(price) >= 30000 — 정상. GROUP BY 로 묶인 그룹마다 평균을 계산한 뒤, 그 결과로 그룹을 거릅니다.
WHERE → GROUP BY → HAVING. WHERE 로 행을 거르고, GROUP BY 로 묶고, HAVING 으로 그룹을 거른다 — 이 순서만 기억하면 세 문제 모두 풀립니다.
문제 1. 평균 3만원 넘는 카테고리
products 에서 — 카테고리별 평균 가격이 3만원 이상 인 카테고리만.
기대 결과: 평균 가격이 30000 이상인 카테고리 3개
| category_id | 평균가격 |
|---|---|
| 1 | 55750.0000 |
| 2 | 46000.0000 |
| 5 | 41000.0000 |
정답 보기
SELECT
category_id,
AVG(price) AS 평균가격
FROM
products
GROUP BY
category_id
HAVING
AVG(price) >= 30000;문제 2. 주문 3건 이상 회원
orders 를 — 회원별로 묶고, 주문이 3건 이상 인 회원만. 주문 많은 순으로.
기대 결과: 7명 · 1위는 김철수 (member_id=1, 6 건)
| member_id | 주문수 |
|---|---|
| 1 | 6 |
| 2 | 4 |
| 9 | 4 |
| 3 | 3 |
| 4 | 3 |
| 6 | 3 |
| 12 | 3 |
정답 보기
SELECT
member_id,
COUNT(*) AS 주문수
FROM
orders
GROUP BY
member_id
HAVING
COUNT(*) >= 3
ORDER BY
주문수 DESC;문제 3 (도전). 한 주문에 총 5개 이상 산 주문
order_items 에서 — 한 주문의 총 수량(SUM(quantity)) 이 5개 이상 인 주문ID 와 총 수량.
기대 결과: order_id 10 한 건 — 총 수량 5
order_items 를 order_id 별로 묶고 SUM(quantity) 에 조건.
| order_id | 총수량 |
|---|---|
| 10 | 5 |
정답 보기
SELECT
order_id,
SUM(quantity) AS 총수량
FROM
order_items
GROUP BY
order_id
HAVING
SUM(quantity) >= 5
ORDER BY
총수량 DESC;세 문제 모두 핵심은 HAVING 한 줄이었습니다. 다음 강의부터는 섹션 3의 하이라이트 — 두 테이블을 붙이는 JOIN 입니다.