[Oracle] 오라클 그룹별 합계 구하기 (SUM)
- 데이터베이스/오라클
- 2021. 7. 5.
오라클에서 그룹별로 합계를 구할 때는 SUM 함수를 사용한다. 기본적으로 GROUP BY 절을 사용하여 그룹별로 합계를 구하며, GROUP BY 절을 사용하지 않고 OVER 절을 사용하면 데이터를 그룹화하지 않고 조회된 각 행에 그룹별 합계를 표시할 수 있다. 합계나 소계를 새로운 행으로 표시하고 싶다면 ROLLUP, GROUPING SETS을 사용하면 된다.
그룹별 합계 - 1 (GROUP BY 절)
SELECT SUM(sal)
FROM emp
SELECT 절에 집계 함수(SUM, MAX, COUNT 등)만 있으면 GROUP BY 절을 사용하지 않아도 집계가 된다.
직군별 합계
SELECT job
, SUM(sal)
FROM emp
GROUP BY job
SELECT 절과 GROUP BY 절에 그룹별로 합산할 컬럼(job)을 지정하면 해당 그룹별로 합계를 출력한다.
직군별, 근무지별 합계
SELECT job
, deptno
, SUM(sal)
, SUM(sal + NVL(comm, 0))
FROM emp
GROUP BY job, deptno
집계 함수(SUM) 내부에서 함수, 연산자를 사용하여 값을 계산할 수 있으며 최종 계산된 값을 합산하여 출력한다.
사칙 연산자를 사용할 때는 해당 컬럼에 NULL이 존재하면 계산이 되지 않으므로 NVL로 치환해 준다.
그룹별 합계 - 2 (OVER 절)
SELECT ename
, job
, sal
, SUM(sal) OVER()
FROM emp
WHERE job = 'MANAGER'
GROUP BY 절을 사용하여 합계를 구하면 그룹별로 합산되어 하나의 행과 합계가 조회되지만, OVER 절을 사용하면 조회된 각 행에 합계를 보여준다.
SUM 함수 옆에 OVER()만 사용하면 조회된 전체(sal)를 합산하여 각 행에 보여준다.
PARTITION BY 절을 사용한 그룹별 합계
SELECT ename
, job
, sal
, SUM(sal) OVER(PARTITION BY job)
FROM emp
WHERE job IN ('MANAGER', 'SALESMAN')
OVER 절 내부에 PARTITION BY 절을 사용하여 그룹 컬럼을 지정하면 해당 그룹별 합계를 각 행에 보여준다.
PARTITION BY 절은 GROUP BY 절과 사용법이 비슷하다고 생각하면 된다.
집계된 합계, 소계를 새로운 행으로 표시하고 싶으면 아래를 참고하면 된다.