Having절

오라클 데이터베이스 SQL 강의 31강 - HAVING 절

지난 시간 GROUP BY를 이용해 집계함수를 적용하는 것을 배웠다. GROUP BY는 집계하기 위한 소그룹을 나누는 절이다.

집계함수에는 SUM, MIN, MAX, COUNT, AVG 등이 있다.

Untitled

이런 문제를 풀어보자.

SELECT WRITER_ID, COUNT(ID) 
FROM NOTICE 
WHERE COUNT(ID) <=2 
GROUP BY WRITER_ID

를 실행하면

Untitled

ORA-00934 : 그룹함수가 허가되지 않는다는 에러가 난다. 왜일까?

SELECT WRITER_ID, COUNT(ID) 
FROM NOTICE 
GROUP BY WRITER_ID;

위와같이 WHERE절을 빼면,

Untitled

이렇게 WRITER_ID와 COUNT(ID)가 출력된다. 여기서 2미만인 것들만 뽑아내면 되는데 왜 WHERE절이 사용되지 않을까?

집계함수는 오직 SELECT 오른쪽, 혹은 HVING절에서만 사용가능하다.

실행순서에서 SELECT는 ORDER BY바로 이전 마지막에 실행된다.

집계함수는 GROUP BY이후에만 사용될 수 있다.

지난시간 실행순서가 FROM→CONNECT BY→WHERE→GROUP BY→HAVING → SELECT→ORDER BY이다. 따라서 HAVING또는 SLELECT절에서만 집계함수를 사용할 수 있다!!