반응형
PARTITION BY는 소계와 통계 값을
내주진 않는다.
이때는 ROLL UP을 사용해준다.
그룹별로 값을 내준다.
-- 부서별 통계
SELECT deptno, sum(sal)
FROM emp
GROUP BY deptno;
이 쿼리의 결과에는 통계는 없고
소계만 나와있다.
-- 부서별 통계
SELECT deptno, sum(sal)
FROM emp
GROUP BY rollup(deptno);
GROUP BY rollup(deptno);
rollup안에 원하는 컬럼을 넣으면
전체 총계가 나온다.
SELECT deptno, ename, sum(sal)
FROM emp
GROUP BY rollup(deptno, ename);
rollup안에 2개의 컬럼이 들어가면
두 컬럼에 대한 rollup이 발생한다.
규칙 1. deptno, job으로 롤업 한다.
deptno와 job이 같은 레코드를 롤업 하여 합을 구한다.
규칙 2. deptno(첫 번째 인수)로 롤업 한다.
롤업 하여 부서별 소계를 구한다.
2번을 하기 위해 우리는 UNION ALL을 사용했었다.
소계를 구해서 테이블 중간에 끼워 넣을 수 없기 때문에
UNION ALL로 합쳐줬던 것이다.
규칙 3. 전체 통계를 구한다.
rollup(A, B, C, D)
만약 rollup의 인수가 4개라면
ABCD 롤업 -> ABC 롤업 -> AB 롤업 -> A 롤업 -> 통계
순서가 된다.
[출처]
https://cafe.naver.com/metacoding
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9
반응형