같은 값을 가진 행들을 하나의 그룹으로 묶어서 집계 연산(SUM, COUNT, AVG 등)을 수행할 때 사용합니다.
비유
FROM 책상에서WHERE 공을GROUP BY 색상별로HAVING 빨간색 중 조건을 걸고SELECT 가져오고ORDER BY 정렬한다batting| 컬럼 | 설명 |
|---|---|
playerID | 선수 ID |
yearID | 시즌 연도 |
teamID | 팀 명칭 |
HR | 홈런 수 |
2004년도 보스턴 팀 선수들의 타격 기록
SELECT *
FROM batting
WHERE yearID = 2004 AND teamID = 'BOS';
2004년도 팀별 홈런 합계
SELECT teamID, SUM(HR) AS homeRuns
FROM batting
WHERE yearID = 2004
GROUP BY teamID
ORDER BY homeRuns DESC;
🔍
GROUP BY teamID: 팀별로 묶어서
🧮SUM(HR): 홈런 합계 계산
🔽ORDER BY: 홈런 수 내림차순 정렬
2004년도에 200홈런 이상 기록한 팀 목록
SELECT teamID, SUM(HR) AS homeRuns
FROM batting
WHERE yearID = 2004
GROUP BY teamID
HAVING SUM(HR) >= 200
ORDER BY homeRuns DESC;
❗
HAVING은 집계된 결과에 조건을 걸 때 사용
⚠WHERE에서는SUM(HR)이나homeRuns별칭 사용 불가!
단일 연도 기준으로 가장 많은 홈런을 기록한 팀
SELECT teamID, yearID, SUM(HR) AS homeRuns
FROM batting
GROUP BY teamID, yearID
ORDER BY homeRuns DESC;
🎯
GROUP BY teamID, yearID: 팀 + 연도 조합으로 묶기
🔍SELECT에서teamID,yearID를 함께 사용 가능
| 순서 | 구문 | 설명 |
|---|---|---|
| 1 | FROM | 테이블로부터 데이터 가져오기 |
| 2 | WHERE | 조건에 맞는 행 필터링 |
| 3 | GROUP BY | 같은 값을 가진 행들끼리 묶기 |
| 4 | HAVING | 그룹화된 결과에 조건 걸기 |
| 5 | SELECT | 필요한 열/계산된 값 선택 |
| 6 | ORDER BY | 결과 정렬 |
SELECT yearID, teamID, AVG(HR) AS avgHR
FROM batting
GROUP BY yearID, teamID
ORDER BY yearID, avgHR DESC;
SELECT teamID, SUM(HR) AS totalHR
FROM batting
GROUP BY teamID
HAVING SUM(HR) >= 1000
ORDER BY totalHR DESC;
GROUP BY는 집계함수와 함께 세트로 쓰인다.HAVING은 집계된 결과에 조건을 걸 때만 사용!SELECT에 포함된 열은 GROUP BY에 포함되어야 한다.WHERE은 행 필터링, HAVING은 그룹 필터링