반응형
HAVING 절을 사용하면 조회할 행 그룹을 선택할 수 있으며, WHERE 절과 유사하게 동작한다.
GROUP BY 절 없이도 사용가능하다.
SELECT SUM(sal) AS sal FROM emp WHERE SUM(sal) > 25000;
WHERE 절은 GROUP BY 절보다 먼저 수행되기 때문에 집계 함수를 사용하면 에러 발생
SELECT SUM(sal) AS sal FROM emp HAVING SUM(sal) > 25000;
WHERE 절 대신에 HAVING을 사용해서 조회 가능.
HAVING 절은 SELECT 절보다 먼저 수행되기 때문에 SELECT 절에 기술되지 않은 집계 함수를 사용해도 에러가 발생하지 않는다.
SELECT deptno, SUM(sal) AS sal FROM emp
GROUP BY deptno HAVING MAX(sal) >= 5000;
HAVING 절에서 행그룹 제외
SELECT deptno, SUM(sal) AS sal FROM emp
GROUP BY deptno HAVING deptno <> 20 ORDER BY 1;
WHERE 절에서 행 제외
SELECT deptno, SUM(sal) AS sal FROM emp
WHERE deptno <> 20 GROUP BY deptno ORDER BY 1;
성능적인 측면에는 WHERE 절을 사용하는게 성능적인 측면에서 좋다.
HAVING 절에 GROUP_ID 함수를 사용하면 중복된 행 그룹 제외 가능
SELECT deptno, job, COUNT(*) AS C1, GROUP_ID() AS GI FROM emp
WHERE sal > 2000 GROUP BY deptno, ROLLUP(deptno, job)
HAVING GROUP_ID() = 0;
반응형
'Develop > DATABASE' 카테고리의 다른 글
오라클)조인(join) - 조인 범위(이너 조인, 등가 조인) (0) | 2022.12.29 |
---|---|
오라클)조인(join) - 조인 조건(카티션 곱, 등가 조인, 비등가 조인) (0) | 2022.12.28 |
오라클)GROUP BY 절 - ROLLUP, CUBE, GROUPING SETS, 조합 열, 연결 그룹, GROUPING 함수, GROUPING_ID 함수 (0) | 2022.12.15 |
오라클)GROUP BY 절 - GROUP BY (0) | 2022.12.14 |
오라클)KEEP 키워드 - DENSE_RANK (FIRST | LAST) (0) | 2022.10.29 |
댓글