3-8 연습 문제 — CASE / 서브쿼리,
직접 짜본 SQL만 머리에 남는다
이번 강의에서 배운 세 가지 — CASE WHEN ... THEN ... END, CASE + GROUP BY, WHERE 절 안 서브쿼리를 손으로 확인합니다. 눈으로 읽은 SQL은 일주일이면 사라지지만, 직접 짜다 틀려본 SQL은 머리에 남습니다. 마지막은 섹션 3을 마무리하는 상관 서브쿼리 도전 문제입니다.
이번 연습의 위치
완료 ✓
완료 ✓
강의 완료 ✓
지금 여기
관계의 구조
2-4에서 만든 AI 과외 선생님 세션을 그대로 쓰세요. 막히면 정답이 아니라 힌트만 요청하고 — 다 푼 뒤에는 본인 SQL과 결과를 던지며 “이 결과가 맞는지 검증해줘” 라고 물어보세요. 직접 짜고 → 검증받는 이 순서가 실력이 됩니다.
문제 1. 회원을 연령대로 분류
members 의 모든 회원에 대해 — 이름·나이·연령대(20대/30대/40대/50대 이상) 컬럼을 함께 출력.
기대 결과: 20행 · 첫 줄 — 김철수 | 35 | 30대
| member_name | age | 연령대 |
|---|---|---|
| 김철수 | 35 | 30대 |
| 이영희 | 28 | 20대 |
| 박민수 | 42 | 40대 |
| ⋮ | ||
정답 보기
SELECT
member_name,
age,
CASE
WHEN age < 30 THEN '20대'
WHEN age < 40 THEN '30대'
WHEN age < 50 THEN '40대'
ELSE '50대 이상'
END AS 연령대
FROM
members;WHEN 은 위에서부터 평가되므로 작은 범위부터 적어야 정확.
문제 2. 연령대별 회원 수
위 분류를 활용 — 연령대별 회원 수. 회원 많은 순으로.
기대 결과: 4행 정도 (20대 / 30대 / 40대 / 50대 이상)
정답 보기
SELECT
CASE
WHEN age < 30 THEN '20대'
WHEN age < 40 THEN '30대'
WHEN age < 50 THEN '40대'
ELSE '50대 이상'
END AS 연령대,
COUNT(*) AS 회원수
FROM
members
GROUP BY
연령대
ORDER BY
회원수 DESC;| 연령대 | 회원수 |
|---|---|
| 20대 | 8 |
| 30대 | 7 |
| 40대 | 4 |
| 50대 이상 | 1 |
문제 3 (도전). 카테고리별 평균보다 비싼 상품들
각 상품에 대해 — 그 상품이 속한 카테고리의 평균 가격보다 비싼 상품들만 출력. (상관 서브쿼리)
기대 결과: 카테고리 안에서 평균보다 가격이 높은 상품들
WHERE 절 안에 그 카테고리의 평균 을 구하는 서브쿼리. 안쪽에서 바깥의
category_id 를 참조해야 합니다.
정답 보기
SELECT
p1.product_name,
p1.category_id,
p1.price
FROM
products p1
WHERE
p1.price > (
SELECT
AVG(p2.price)
FROM
products p2
WHERE
p2.category_id = p1.category_id
)
ORDER BY
p1.category_id,
p1.price DESC;핵심: 안쪽 서브쿼리의 p2.category_id = p1.category_id — 이게 상관 서브쿼리. 바깥 쿼리의 각 행마다 안쪽이 다시 실행됨.
| product_name | category_id | price |
|---|---|---|
| 패딩 점퍼 | 1 | 129000 |
| 후드 집업 | 1 | 65000 |
| 무선 이어폰 | 2 | 89000 |
| 키보드 | 2 | 75000 |
| 블루투스 스피커 | 2 | 65000 |
| 트러플 오일 | 3 | 35000 |
| 유기농 꿀 | 3 | 28000 |
| 콜드브루 원두 | 3 | 22000 |
| 클린 코드 | 4 | 35000 |
| 데이터 모델링 실전 | 4 | 32000 |
| 향수 | 5 | 89000 |
섹션 3 완료 🎉
8 챕터 + 8 연습 페이지를 다 풀었다면 — SQL 핵심 문법의 80% 가 손에 들어왔습니다. 이제 AI 가 만든 SQL 의 대부분을 읽고, 의심하고, 검증 할 수 있는 상태.
다음 섹션부터는 문법이 아니라 설계입니다 — 테이블이 왜 이렇게 쪼개져 있는지, 테이블 사이의 ‘관계’를 읽는 눈을 만듭니다.