SELECT user_level, COUNT(*) 인원수
FROM USER
GROUP BY user_level
-> 레벨 별로 사용자를 묶어서 각 레벨 별 인원수를 구한다.
이때, 그룹화되지 않은 컬럼은 사용 불가.
(예: 저 상태에서 사용자별 코인 수 조회는 불가. 단, AVG 같이 집계함수를 사용하면 가능)
즉, GROUP BY로 묶고, 집계함수 쓰는것.
SELECT user_level, COUNT(*) AS 인원수
FROM USER
GROUP BY user_level
HAVING COUNT(*) >= 10;
-> 레벨별 인원수가 10명 이상인 레벨만 조회
| 구분 | GROUP BY | HAVING |
|---|---|---|
| 역할 | 행(row)을 그룹으로 묶음 | 그룹화된 결과를 필터링 |
| 적용 대상 | 개별 행 | 그룹 결과 |
| 실행 순서 | WHERE 다음 | GROUP BY 다음 |
| 사용 목적 | 집계 기준 생성 | 집계 결과 조건 지정 |
| 사용 가능한 컬럼 | SELECT에 사용하는 비집계 컬럼 | GROUP BY 컬럼 또는 집계 함수 |
| 집계 함수 사용 | 가능 | 가능 |
| 그룹화 안 된 컬럼 사용 | ❌ 불가 | ❌ 불가 |
| WHERE 사용 가능 여부 | ❌ (동시에 사용 불가) | ❌ (동시에 사용 불가) |
| AS 사용 가능 여부 | ❌ | ❌ |