반응형

개발을 하다보면 통계 기능을 구현할 때가 있는데 그때 유용하게 쓸 수 있는 ROLLUP 을 정리해 보았다.

롤업을 사용하면 통계 낸 결과의 소계를 쉽게 구할 수 있다.

 

* Mysql(MariaDB)

SELECT

COL1, SUM(COL2)

FROM TEST_TABLE

GROUP BY COL1 WITH ROLLUP;

* ORACLE

SELECT

COL1, SUM(COL2)

FROM TEST_TABLE

GROUP BY ROLLUP(COL1);

 

아래는 활용예시이다.

 

위와 같은 테스트 테이블을 만들었다.

 

먼저 이름(NAME)으로 그룹핑해서 평균 급여(SALARY)를 구해보았다.

 

SELECT NAME, ROUND(AVG(SALARY)) FROM TEST_TABLE GROUP BY NAME;

위의 쿼리를 실행하면 다음과 같은 결과를 볼 수 있다.

여기에 롤업을 추가해서 실행해 보았다.

SELECT NAME, ROUND(AVG(SALARY)) FROM TEST_TABLE GROUP BY NAME WITH ROLLUP;

 

앞서 실행한 결과에 전체의 평균이 추가로 출력된다.

하지만 이는 전체 결과값의 평균이라 한번 더 감싸서 구하면 평균의 평균을 구할 수 있다.

 

SELECT

        NAME,

        ROUND(AVG(AVG_SALARY))

    FROM

    (SELECT

        NAME,

        ROUND(AVG(SALARY)) AVG_SALARY

    FROM TEST_TABLE A

    GROUP BY NAME) B

GROUP BY NAME WITH ROLLUP;

 

위의 쿼리를 실행한 결과 값이다.

 

평균뿐만 아니라 합계, 최대, 최소 등의 값으로 활용할 수 있다.

비슷하게 오라클에는 CUBE 도 있으니 찾아보는 것을 추천한다.

 

반응형

+ Recent posts