반응형
이 게시물은 Database GUI Oracle SQL Developer의 아래 버전 정보를 기준으로 작성되었습니다. Java(TM) 플랫폼 : 1.8.0_321 Oracle IDE : 4.1.5.21.78 |
GROUP BY, HAVING
설명
GROUP BY : 특정 컬럼을 기준으로 집계를 내는데 사용하는 SELECT문의 포함절. 이를 이용해 한 행으로 나오는 데이터와 여러 행이 나올 수 있는 데이터를 묶어서 명시할 수 있음
HAVING : 출력 그룹을 제한하는 조건식. GROUP BY절에 조건을 줄 때 사용. 즉, GROUP BY가 있을 때만 사용 가능
※ WHERE와 HAVING의 비교
WHERE : 출력 대상 행을 제한
HAVING : 그룹화된 대상을 출력에서 제한
문법
SELECT ...
FROM ...
WHERE ...
GROUP BY [그룹화할 컬럼]
(HAVING) [다중행 함수의 조건식]
사용 예시
-- query1
SELECT AVG(SAL) FROM EMP WHERE DEPTNO = 10
UNION ALL
SELECT AVG(SAL) FROM EMP WHERE DEPTNO = 20
UNION ALL
SELECT AVG(SAL) FROM EMP WHERE DEPTNO = 30;
-- query2
SELECT AVG(SAL), DEPTNO
FROM EMP
GROUP BY DEPTNO;
-- query3
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;
-- query4
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
WHERE AVG(SAL) >= 2000
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO, JOB;
-- query5
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
결과
-- query1
-- query2
→ GROUP BY절을 통해 각 부서별 평균 급여를 간단히 그룹화 가능
-- query3
-- query4
→ WHERE절에 그룹화된 데이터를 제한할 수 없음!
-- query5
반응형
'개발 지식 > [DBMS] Oracle' 카테고리의 다른 글
[Oracle] 데이터 그룹화(3) - GROUPING SETS() (0) | 2022.05.24 |
---|---|
[Oracle] 데이터 그룹화(2) - ROLLUP(), CUBE() (0) | 2022.05.23 |
[Oracle] 다중행 함수(4) - AVG() (0) | 2022.05.21 |
[Oracle] 다중행 함수(3) - MAX(), MIN() (0) | 2022.05.20 |
[Oracle] 다중행 함수(2) - COUNT() (0) | 2022.05.19 |