본문으로 건너뛰기
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 미완료 상태