집계 함수
| 함수 | 의미 |
|---|---|
| COUNT(*) | 행 수 |
| COUNT(col) | NULL 아닌 col 개수 |
| SUM(col) | 합 |
| AVG(col) | 평균 |
| MIN / MAX | 최소·최대 |
GROUP BY
SELECT city, COUNT(*) AS cnt
FROM users
GROUP BY city
ORDER BY cnt DESC;
SELECT에 집계가 아닌 열을 넣으면 GROUP BY에 함께 넣어야 합니다 (SQLite도 대체로 이 규칙을 따릅니다).
HAVING
그룹에 대한 필터입니다. WHERE는 그룹 전, HAVING은 그룹 후.
SELECT city, COUNT(*) AS cnt
FROM users
GROUP BY city
HAVING COUNT(*) >= 2;
NULL와 COUNT
COUNT(col)은 NULL을 세지 않습니다. 행 자체가 필요하면 COUNT(*).
COALESCE
SELECT COALESCE(nickname, name) AS label FROM users;
NULL을 대체값으로 바꿉니다.
자주 하는 실수
- SELECT에
city를 넣었는데 GROUP BY에 없음 - WHERE에
COUNT(*)를 씀 → HAVING으로 옮기기 COUNT(col)과COUNT(*)혼동 (NULL)
연습 패턴
“도시별 주문 수, 2건 이상만, 많은 순”
SELECT city, COUNT(*) AS cnt
FROM orders
GROUP BY city
HAVING COUNT(*) >= 2
ORDER BY cnt DESC;
결과 열 이름·정렬이 문제 조건과 같은지 확인하세요.
연습
집계 결과에 조건을 걸 때는 WHERE가 아니라 HAVING인지 예제로 확인하세요.