YS's develop story

SQL Having, Where 차이 본문

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를 찾을 수 없다고 아래와 같이 에러가 발생하게 됩니다.

Comments