IT/DataBase

[Oracle]GROUP BY + 그룹함수(SUM, COUNT 등)

알 수 없는 사용자 2022. 11. 19.

Oracle Group by/그룹함수

쉽게 생각하면 된다. GROUP BY 다음에 오는 컬럼으로 먼저 그룹핑을 한 다음 그룹함수를 실행

SELECT deptno, 
	   job,
	   AVG(NVL(sal, 0)) "AVG_SAL"
FROM emp
GROUP BY deptno, job
ORDER BY deptno,job;

[Oracle]GROUP BY + 그룹함수(SUM, COUNT 등) - undefined - Oracle Group by/그룹함수
emp 테이블에서 부서번호, 직업으로 그룹핑 후 평균 조회

위의 쿼리는 emp테이블에서 부서번호(deptno)로 먼저 그룹핑, 그 다음 직업(job)으로 그룹핑을 한 후 SELECT절에 있는 그룹함수인 AVG() 함수를 실행한 결과를 나타낸다.
주의사항이 있는데 GROUP BY사용 시 SELECT절의 그룹함수를 제외한 컬럼은 반드시 GROUP BY 절에 나온 컬럼을 명시해야 한다. 안할 경우 아래처럼 에러 발생

[Oracle]GROUP BY + 그룹함수(SUM, COUNT 등) - undefined - Oracle Group by/그룹함수
group by에 없는 job을 SELECT해서 나온 에러

HAVING 절

일반적으로 WHERE절에서는 집계함수를 사용할 수 없음,

HAVING절은 집계함수로 조건 비교 시 사용함,

HAVING절은 GROUP BY절과 함께 사용됨

보통 GROUP BY와 집계함수로 그룹핑한 결과를 출력한 다음 조건을 걸 때 사용됨

[Oracle]GROUP BY + 그룹함수(SUM, COUNT 등) - undefined - HAVING 절
emp테이블과 dept테이블을 조인해서 사원수가 5명이 넘는 부서와 사원수를 조회

[Oracle]GROUP BY + 그룹함수(SUM, COUNT 등) - undefined - HAVING 절

댓글