오라클 SELECT 쿼리 문에서 GROUP BY 구문을 사용해서 그룹 별로 합계(SUM)를 가져오는 작업을 많이 하게 됩니다.
이렇게 가져온 데이터를 다시 전체 합계(Total)을 구해서 첫 번째 줄이나 마지막 줄에 추가해서 보여주거나, 부분 그룹으로 소계(Sub Total)을 구해서 그룹 사이사이에 소계를 추가해서 보여주도록 프로그래밍을 하기도 합니다.
SELECT 쿼리 문을 실행하는 과정에서 전체 합계나 부분 합계를 자동으로 가져올 수 있다면 무척 유용할 것이란 생각이 듭니다.
고맙게도 Oracle의 쿼리 명령어 중에 ROLLUP과 CUBE가 이런 역할을 수행해 주고 있습니다.
이번 글에서는 ORACLE SELECT 구문의 GROUP BY SUM()에 대한 Total과 Sub Total 추가 방법에 대해 알아보겠습니다.
그룹 마지막에 소계를 추가하거나 결과 맨 마지막에 전체 합계를 추가하는 방법
▶ 오라클에서 GROUP BY 뒤에 ROLLUP을 선언해 주면 각 그룹의 소계 및 전체 합계를 각 그룹의 맨 마지막 행으로 추가해서 보여줍니다.
- GROUP BY 컬럼이 하나인 경우 전체 합계(Total)만 추가로 표시됩니다.
SELECT PCOFFICEGBN, SUM(ANINCOME)
FROM TOFFICESUM
WHERE PAYYM = ‘202401’
GROUP BY ROLLUP(PCOFFICEGBN);
|
- GROUP BY 컬럼이 2개 이상인 경우 그룹별 소계(Sub Total)가 추가로 표시됩니다.
SELECT PCOFFICEGBN, PCPAYGBN SUM(ANINCOME)
FROM TOFFICESUM
WHERE PAYYM = ‘202401’
GROUP BY ROLLUP(PCOFFICEGBN, PCPAYGBN);
|
첫 번째 행에 전체 합계를 추가하거나 각 그룹 첫 번째에 소계를 추가하는 방법
▶ 오라클에서 GROUP BY 뒤에 CUBE를 선언해 주면 각 그룹의 소계 및 전체 합계를 각 그룹의 첫 번째 행으로 추가해서 보여줍니다.
- GROUP BY 컬럼이 하나인 경우 전체 합계(Total)만 추가로 표시됩니다.
SELECT PCOFFICEGBN SUM(ANINCOME)
FROM TOFFICESUM
WHERE PAYYM = ‘202401’
GROUP BY CUBE(PCOFFICEGBN);
|
- GROUP BY 컬럼이 2개 이상인 경우 그룹별 소계(Sub Total)가 추가로 표시됩니다.
SELECT PCOFFICEGBN, PCPAYGBN SUM(ANINCOME)
FROM TOFFICESUM
WHERE PAYYM = ‘202401’
GROUP BY CUBE(PCOFFICEGBN, PCPAYGBN);
|
마무리
SELECT 쿼리 문을 실행하는 단계에서 합계(Total) 및 소계(Sub Total)을 함께 가져올 수 있다는 것은 매우 유용한 장점이 될 수 있습니다.
프로그램 구문으로 전체 합계를 행의 첫 번째나 마지막에 추가하는 것은 비교적 쉬운 작업이지만 그룹별 소계를 행의 중간에 추가하는 것은 약간의 추가적인 로직 구현이 필요합니다.
GROUP BY 에서 ROLLUP 또는 CUBE를 적당히 잘 활용하면 합계를 출력하는데 있어 좀 더 쉽게 작업을 할 수 있습니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^