AI 시대 DB 모델링 & SQL 완벽 마스터3-5 연습 문제
테크타니 LEARN — 섹션 03 · 연습 문제

3-5 연습 문제 — 그룹을 거르는 조건,
HAVING 세 문제로 굳히기

강의를 본 것만으로는 안 남습니다 — 직접 짜본 SQL만 머리에 남아요. WHERE 와 HAVING 의 차이, WHERE → GROUP BY → HAVING 실행 순서, 그리고 집계 함수 조건은 HAVING — 방금 배운 세 가지를 손으로 확인합니다.

문제3문제 (도전 1 포함)권장 소요15분테이블products · orders · order_items준비물DBeaver + shop DB (2-3 완료)
AI 과외 선생님 활용법

막히면 2-4에서 만든 AI 과외 선생님 세션에 먼저 물어보세요 — 단, 정답이 아니라 힌트만 요청하기. 그리고 다 푼 뒤에는 본인 SQL과 결과를 던지고 “이 결과가 맞는지 검증해줘” 라고 물어보세요. 검증하는 습관이 이 강의의 최종 목표입니다.

지금 어디까지 왔나

3-1 ~ 3-3

완료 ✓

3-4 GROUP BY

완료 ✓

3-5 HAVING 연습

지금 여기

3-6 ~ 3-7 JOIN

다음 강의

3-8 섹션 마무리

CASE·서브쿼리

풀기 전에 — 30초 복습

이번 강의에서 배운 것 한 줄 요약 — 집계 함수에 거는 조건은 무조건 HAVING 입니다.

✕ WHERE 에 집계 함수

WHERE 는 그룹 묶기 전

WHERE AVG(price) >= 30000에러. WHERE 는 행을 하나씩 거르는 단계라, 아직 그룹이 없어서 평균을 알 수 없습니다.

✓ HAVING 에 집계 함수

HAVING 은 그룹 묶은 후

HAVING AVG(price) >= 30000정상. GROUP BY 로 묶인 그룹마다 평균을 계산한 뒤, 그 결과로 그룹을 거릅니다.

실행 순서

WHERE → GROUP BY → HAVING. WHERE 로 행을 거르고, GROUP BY 로 묶고, HAVING 으로 그룹을 거른다 — 이 순서만 기억하면 세 문제 모두 풀립니다.

문제 1. 평균 3만원 넘는 카테고리

products 에서 — 카테고리별 평균 가격이 3만원 이상 인 카테고리만.

기대 결과: 평균 가격이 30000 이상인 카테고리 3개

기대 결과 — 3행
category_id평균가격
155750.0000
246000.0000
541000.0000
3 rows — 식품(3)·도서(4)는 평균이 3만원 미만이라 탈락
정답 보기
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 건)

기대 결과 — 7행
member_id주문수
16
24
94
33
43
63
123
7 rows — 주문수가 같은 행끼리는 순서가 다를 수 있어요
정답 보기
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_itemsorder_id 별로 묶고 SUM(quantity) 에 조건.

기대 결과 — 1행
order_id총수량
105
1 row — 조건을 만족하는 주문은 10번(조성민) 하나뿐
정답 보기
SELECT
  order_id,
  SUM(quantity) AS 총수량
FROM
  order_items
GROUP BY
  order_id
HAVING
  SUM(quantity) >= 5
ORDER BY
  총수량 DESC;

세 문제 모두 핵심은 HAVING 한 줄이었습니다. 다음 강의부터는 섹션 3의 하이라이트 — 두 테이블을 붙이는 JOIN 입니다.

NEXT LESSON3-6 JOIN 핵심

members 와 orders 를 붙여서 — '누가 주문했는지' 이름으로 보는 법.

GO ▸ 다음 강의 시작하기