개발 지식/[DBMS] Oracle

[Oracle] 데이터 그룹화(1) - GROUP BY, HAVING

devGSP 2022. 5. 22. 08:00
반응형
이 게시물은 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

dg1_q1

 

 

-- query2

 

GROUP BY절을 통해 각 부서별 평균 급여를 간단히 그룹화 가능

dg1_q2

 

 

-- query3

dg1_q3

 

 

-- query4

dg1_q4

WHERE절에 그룹화된 데이터를 제한할 수 없음!

 

 

-- query5

dg1_q5

반응형