Oracle - GROUP BY, HAVING

select문 통해 조회한 결과를 정해준 기준(GROUP BY) 에 따라 그룹으로 분류하는 쿼리이다.

EMP 테이블에서 부서별 평균 급여를 조회하고자 한다면, 다음과 같은 쿼리로 조회할 수 있다.

1
2
3
SELECT deptno, round(avg(sal))
FROM emp
GROUP BY deptno;

부서별 평균 급여가 2,000 이상인 부서의 평균 급여를 조회하려면 어떻게 해야할까?

이 경우엔 WHERE 절을 이용할 수 없다. 부서별 평균급여가 2,000 이상이라는 조건이 GROUP BY 에 조건을 걸어서 조회해야 하기 때문이다. 이 경우 사용하는 키워드가 HAVING 이다. 위의 퀴즈에 대한 sql 코드는 다음과 같다.

1
2
3
4
SELECT deptno, round(avg(sal))
FROM emp
GROUP BY deptno
HAVING avg(sal)>=2000;