본문 바로가기
SQL/Oracle

오라클 ROLLUP을 이용해 소계 합계 구하는 방법

by wakestand 2020. 11. 20.
반응형

오라클에서는 ROLLUP을 이용해

GROUP BY로 분류한 전체 ROW와 소계, 총계를 구할 수 있는데

 

오라클 ROLLUP 개념 및 예제

오라클에서 ROLLUP은 소계, 합계를 자동으로 뽑을 때 사용하는데 GROUP BY 후 기준으로 사용할 컬럼을 ROLLUP(컬럼) 으로 묶어주는 식이 되겠다 위 예제를 보면 해당되는 컬럼의 값이 쭉 나오고 소계,

wakestand.tistory.com

일단 GROUPING(컬럼)을 사용해 일반 ROW인지

소계, 총계에 속하는 ROW인지 분류가 가능한데

GROUPING 사용하는 방법은 아래 링크를 확인해주면 되고

 

오라클 GROUPING 함수 개념 및 예제

오라클에서 GROUPING 함수는 ROLLUP, CUBE와 함께 사용할 때 쓰이는데 먼저 GROUPING 함수 자체는 GROUPING(컬럼명) 으로 사용하며 사용 시에는 반드시 GROUP BY에 GROUPING 해준 항목을 넣어야 한다 보면 GROUPI..

wakestand.tistory.com

GROUP BY ROLLUP(컬럼)으로 소계, 총계를 생성할

기준 컬럼을 정해줄 수 있다

 

일반 GROUP BY 컬럼명과 비교해보면

 

일반 GROUP BY로는

GROUP에 속하는 모든 ROW와 총계를 구할 수 없고

소계만 구할 수 있기 때문에

 

맨 위와 같은 쿼리를 찍고 싶으면 UNION을 사용해야 하는데

이게 실전에서는 컬럼 값 종류에 따라

UNION이 무한하게 늘어나게 되는데 이러면 쓸게 못된다

 

반면 ROLLUP을 사용하면

저렇게 짧은 코드로도 쉽게 구현이 가능하다

 

마지막으로 예제에 사용한 쿼리는 아래와 같다

 

SELECT CASE WHEN G_JOB = 1 AND G_SAL = 1 THEN '총계'
            WHEN G_SAL = 1 THEN '소계'
            ELSE JOB END AS GUBUN -- 일반, 소계, 총계 확인용
	   ,JOB
	   ,SAL
  FROM 
      (
	SELECT JOB, SUM(SAL) AS SAL, GROUPING(JOB) G_JOB, GROUPING(SAL) G_SAL
	  FROM EMP
	 WHERE JOB IN ('ANALYST', 'PRESIDENT', 'MANAGER')
      GROUP BY ROLLUP(JOB, SAL) -- JOB, SAL 기준으로 소계, 총계 생성
      )
반응형

댓글