Database
SQL Having, Where 차이
Yusang
2021. 4. 28. 10:24
SQL Having, Where 차이


위와 같이 instructor라는 테이블이 있습니다.
SELECT dept_name, AVG(salary) AS avg_salary
FROM instructor
GROUP BY dept_name
HAVING AVG(salary) > 42000;

집계 함수와 GROUP BY 키워드를 활용해 위와 같은 쿼리문으로
dept_name별로 평균 연봉을 출력하도록 할 수 있습니다.
하지만 여기서 궁금한 게 생겼습니다.
HAVING이 아닌 WHERE키워드로 위와 똑같이 출력하도록 할 수 있지 않을까요?
결론부터 말하자면 그렇게 할 수 없습니다!

데이터베이스 원서에도 위와 같이 나와 있습니다.
HAVING은 그룹을 형성 한 후에 적용이 되지만
WHERE는 그룹을 만들기 전에 적용이 됩니다.
SELECT dept_name, AVG(salary) AS avg_salary
FROM instructor WHERE avg_salary > 40000
GROUP BY dept_name
그렇기 때문에 위와 같은 쿼리를 실행시킨다면 에러가 발생하게 됩니다!!
SELECT
content,
(SELECT COUNT(*) FROM CommunityReply WHERE Community.contentId = CommunityReply.contentId ) AS replyCount
FROM Community
HAVING replyCount > 0;

또한 서브 쿼리에서도 마찬가지로 적용이 됩니다.
위와 같이 Having을 이용해
게시글의 댓글이 0개 이상이면 게시글의 내용과 댓글 개수를 가져오는 쿼리가 있습니다.
이는 정상적으로 잘 실행됩니다.
하지만 HAVING을 WHERE로 변경하게 되면
replyCount를 찾을 수 없다고 아래와 같이 에러가 발생하게 됩니다.
