28. HAVING

HAVING

 

EMP 테이블에서 부서번호가 20, 30 인 부서를 대상으로 부서의 총 급여가 10000 보다 적을 경우만 부서별 총 급여를 조회한다.

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
-- (GROUP 함수를 일반 WHERE에서 쓸 수 없어서 생기는 오류)

 

-- 1
SELECT DEPTNO, SUM(SAL)
  FROM EMP
 WHERE DEPTNO IN (20, 30)
GROUP BY DEPTNO
HAVING SUM(SAL) < 10000;
--==>> 30	  9400

-- 2
SELECT DEPTNO, SUM(SAL)
  FROM EMP
GROUP BY DEPTNO
HAVING SUM(SAL) < 100000
   AND DEPTNO IN (20, 30);
--==>> 30  	9400

같은 결과이긴 하지만 FROM과 WHERE로 1차적 메모리를 올리고 그 이후에 추가적으로 계산하는데 이 논리로 보면 오라클에게는 1번을 조금 더 원할하게 처리

이러한 작은 차이가 퍼포먼스로 이어진다.

 

 

 

 

 

 

 

 

 

 

 

 


https://www.instagram.com/p/CarI16JJ_ck/?utm_source=ig_web_copy_link

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.

이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.


 

'SQL > Oracle' 카테고리의 다른 글

30. ROW_NUMBER, 시퀀스(SEQUENCE)  (0) 2022.03.29
29. 중첩 그룹함수 / 분석함수  (0) 2022.03.12
27. CUBE  (0) 2022.03.12
26. ROLLUP, GROUPING  (0) 2022.03.12
25. 그룹 함수  (0) 2022.03.12