6. 정리
집계 함수 6종(COUNT·COUNT(DISTINCT)·SUM·AVG·MIN·MAX)은 GROUP BY 로 나눈 그룹마다 계산되며, WHERE 는 그룹을 짓기 전에 행을, HAVING 은 그룹을 지은 뒤에 그룹을 거른다는 평가 순서(FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY)가 이 레슨의 핵심입니다.
SELECT 의 비집계 컬럼은 반드시 GROUP BY 에 있어야 하며, GROUP BY 없는 HAVING 은 전체를 한 그룹으로 취급하고, 빈 테이블은 GROUP BY 유무에 따라 1행(COUNT 0)과 0행으로 결과가 갈립니다. 통계 리포트에서는 월별·요일별 집계, 없는 날짜를 0으로 채우는 달력 조인, 100.0 을 곱해 정수 나눗셈을 피하는 구성비 계산, HAVING 으로 거르는 상위 그룹 패턴을 자주 씁니다.
GROUP BY·HAVING 별칭 허용 여부와 문자열 집계 함수 이름은 DB 마다 달라(4절 변형 5·6), H2 로 확인한 결과를 실제 DB 동작의 근거로 삼으면 안 됩니다.
그룹 합계에 소계를 더하는 ROLLUP·CUBE(고급 06), 행과 열을 바꾸는 PIVOT(고급 05), 그룹을 유지하면서 순위를 매기는 분석 함수(고급 01·02), 이 레슨의 패턴을 실무 리포트로 확장하는 내용(실무 05)은 다음 레슨에서 이어집니다.