-- ■■■ HAVING ■■■--
-- ● EMP 테이블에서 부서번호가 20, 30 인 부서를 대상으로
-- 부서의 총 급여가 10000보다 적을 경우만 부서별 총 급여를 조회한다.
SELECT DEPTNO, SUM(SAL)
FROM EMP
WHERE DEPTNO IN (20,30)
GROUP BY DEPTNO;
/*
30 9400
20 10875
*/
SELECT DEPTNO, SUM(SAL)
FROM EMP
WHERE DEPTNO IN (20,30)
AND SUM(SAL) < 10000
GROUP BY DEPTNO;
/*
ORA-00934: group function is not allowed here
00934. 00000 - "group function is not allowed here"
*Cause:
*Action:
592행, 11열에서 오류 발생 (WHERE 조건절에서 SUM()을 사용할 수 없다)
*/
SELECT DEPTNO, SUM(SAL)
FROM EMP
WHERE DEPTNO IN (20,30)
GROUP BY DEPTNO
HAVING SUM(SAL) <10000;
--===>>30 9400
--(HAVING 은 그룹으로 묶어진 상황에서의 조건)
SELECT DEPTNO, SUM(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING SUM(SAL) <10000 AND DEPTNO IN (20,30);
--==>>30 9400
-- WHERE 조건절을 없애고 이렇게 써도 결과는 같지만
-- 위의 WHERE 조건절을 쓴 경우가 더 권장됨.
-- 조금이라도 덜 메모리에 퍼올리게 하는 것이 필수적으로 생각해야 하는부분 데이터베이스에서