본문 바로가기

📚Study Note/ORACLE

[ ORACLE ] HAVING 절

-- ■■■ 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 조건절을 쓴 경우가 더 권장됨. 
-- 조금이라도 덜 메모리에 퍼올리게 하는 것이 필수적으로 생각해야 하는부분 데이터베이스에서