홈 › SQL 중급 › 10 / 11

집계와 GROUP BY·HAVING

통계 쿼리의 기초
섹션 6진행 0 / 11

5. 자주 하는 실수 (Tip)

실수 1: WHERE 절에 집계 함수 조건을 쓴다

WHERE COUNT(*) > 1 처럼 WHERE 에 집계 함수 조건을 쓰면 오류가 납니다. WHERE 는 그룹이 만들어지기 전(2.2절 1~2단계)에 평가되어 아직 집계 값이 없기 때문입니다. 그룹 단위 조건은 반드시 HAVING 에 씁니다.

실수 2: SELECT 에 그룹 기준에 없는 컬럼을 섞는다

GROUP BY dept 인데 SELECT id, dept, ... 처럼 그룹 기준에 없는 id 를 그대로 쓰는 실수입니다. H2 를 포함한 대부분의 DB 는 오류로 막지만, ONLY_FULL_GROUP_BY 를 끈 예전 MySQL 환경에서는 오류 없이 임의의 행 값을 돌려줘 잘못을 알아채기 어렵습니다.

실수 3: 정수 나눗셈과 H2 통과를 실제 DB 동작으로 믿는다

4절 변형3 에서 봤듯이 정수끼리 나누면 소수점이 잘릴 수 있어, 분모나 분자 중 하나를 100.0 처럼 소수 리터럴로 만들거나 CAST 를 써야 합니다. 4절 변형5 에서 확인했듯 H2 는 모든 모드에서 GROUP BY·HAVING 에 SELECT 별칭을 허용하지만, 실제 MSSQL 과 23ai 이전 Oracle 은 이를 거부하므로 별칭 대신 식을 그대로 반복해 쓰는 편이 안전합니다.