본문으로 건너뛰기
SQL 기초집LESSON 11

GROUP BY와 HAVING

난이도입문 → 초급
예상 시간30분
선수지식이전 강의

11강. GROUP BY와 HAVING

1. 이번 강의에서 해결할 문제

전체 평균만으로는 모드나 지역별 차이를 볼 수 없습니다. 같은 분류의 행을 그룹으로 묶고 의미 있는 그룹만 남깁니다.

2. 학습 목표

3. 핵심 개념

WHERE는 그룹화 전 개별 행, HAVING은 그룹화 후 집계 결과를 필터링합니다. SELECT의 비집계 열은 원칙적으로 GROUP BY에 포함해야 이식 가능하고 결정적인 SQL이 됩니다.

4. 단계별 SQL 예시

대상 테이블: games, players (읽기 전용)
파일 경로: C:\dev\game-ranking-db\sql\11-grouping.sql

sql/11-grouping.sql
SELECT
mode,
COUNT(*) AS game_count,
ROUND(AVG(duration_seconds), 1) AS average_seconds
FROM games
GROUP BY mode
ORDER BY game_count DESC, mode;

SELECT
region,
COUNT(*) AS player_count
FROM players
WHERE created_at < '2099-01-01'
GROUP BY region
HAVING COUNT(*) >= 1
ORDER BY player_count DESC, region;
PowerShell · 실행 순서
sqlite3 -header -box .\data\game_ranking.db ".read .\sql\11-grouping.sql"

5. 쿼리가 동작하는 이유

GROUP BY가 같은 mode 또는 region 값을 한 그룹으로 묶습니다. 각 그룹마다 집계가 한 번 계산됩니다. HAVING은 계산된 player_count 조건에 해당하는 그룹만 남깁니다.

6. 자주 하는 실수와 안전한 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

GROUP BY와 HAVING 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“GROUP BY와 HAVING”의 두 선택을 비교할 때 기준이 되는 설명은 무엇인가요?
  2. 문제 2“GROUP BY와 HAVING”의 작업 기준으로 ‘GROUP BY에 없는 비집계 열 선택’을 진단하거나 바로잡은 선택은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

11강. GROUP BY와 HAVING 미완료 상태