Aggregate

COUNT(*)의 함정

LEFT JOIN 뒤의 NULL 보존 행도 행은 행입니다. COUNT(*)는 그 한 줄까지 세어 버립니다.

보존 행
실제 주문
COUNT(*) 함정
회원
order_id
COUNT(*)
김철수
1
1
김철수
2
1
박민수
NULL
1로 계산
잘못된 집계

주문 없는 회원도 1건

COUNT(*)는 그룹 안의 행 수를 세므로 NULL로 채워진 보존 행까지 포함합니다.

SELECT u.username, COUNT(*) AS order_count
FROM users u
LEFT JOIN orders o ON u.user_id = o.user_id
GROUP BY u.username;