반응형
[ORACLE] 집계함수의 SUMMARY 구하기 - ROLLUP 함수
CR_DTM, CR_TYPE 그룹으로 갯수(CNT) 관련컬럼은 합(SUM)을 비율(RATE) 관련컬럼은 평균(AVG)를 나타내려고 한다.
단계 1. 집계 함수 (SUM, AVG)
SELECT CR_DTM
, CR_TYPE
, SUM(TOTAL_CNT) AS TOTAL_CNT
, SUM(MINUTE1_CNT) AS MINUTE1_CNT
, AVG(MINUTE1_RATE) AS MINUTE1_RATE
, SUM(MINUTE2_CNT) AS MINUTE2_CNT
, AVG(MINUTE2_RATE) AS MINUTE2_RATE
, SUM(MINUTE3_CNT) AS MINUTE3_CNT
, AVG(MINUTE3_RATE) AS MINUTE3_RATE
, SUM(MINUTE4_CNT) AS MINUTE4_CNT
, AVG(MINUTE4_RATE) AS MINUTE4_RATE
, SUM(MINUTE5_CNT) AS MINUTE5_CNT
, AVG(MINUTE5_RATE) AS MINUTE5_RATE
FROM EXMP_TABLE
GROUP BY CR_DTM, CR_TYPE
단계 2. ROLLUP 함수
SELECT CR_DTM
, CR_TYPE
, SUM(TOTAL_CNT) AS TOTAL_CNT
, SUM(MINUTE1_CNT) AS MINUTE1_CNT
, AVG(MINUTE1_RATE) AS MINUTE1_RATE
, SUM(MINUTE2_CNT) AS MINUTE2_CNT
, AVG(MINUTE2_RATE) AS MINUTE2_RATE
, SUM(MINUTE3_CNT) AS MINUTE3_CNT
, AVG(MINUTE3_RATE) AS MINUTE3_RATE
, SUM(MINUTE4_CNT) AS MINUTE4_CNT
, AVG(MINUTE4_RATE) AS MINUTE4_RATE
, SUM(MINUTE5_CNT) AS MINUTE5_CNT
, AVG(MINUTE5_RATE) AS MINUTE5_RATE
FROM EXMP_TABLE
GROUP BY ROLLUP(CR_DTM, CR_TYPE)
GROUP BY ROLLUP (CR_DTM, CR_TYPE) 의 결과를 보면
(CR_DTM, CR_TYPE) 그룹의 합계와 (CR_DTM)의 소계결과가 나온것을 볼 수 있다.
만약 (CR_DTM, CR_TYPE) 의 합계 결과만 보고싶다면 GROUP BY ROLLUP ((CR_DTM, CR_TYPE)) 으로 한번 더 묶어줘야 다음과 같은 결과를 얻을 수 있다.
그렇다면 어떤 원리로 ROLLUP 함수가 동작하는 것일까?
ROLLUP의 동작원리
1. ROLLUP의 인자로 들어온 컬럼을 오른쪽부터 하나씩 빼면서 GROUP을 만든다.
2. '( )'의 의미는 GROUP이 없는 전체에 대한 집계 결과를 출력한다.
- 단계2 예제에서 GROUP BY ROLLUP(A, B) 이므로 아래와 같다.
① GROUP BY A, B (예제 기준 배경색상 없음)
② GROUP BY A (예제 기준 배경색)
③ ( ) (예제 기준 배경색)
3. 괄호로 묶여있는 컬럼은 하나로 본다.
4. ROLLUP 이전 일반 컬럼과 GROUP BY 하는 경우, 일반 컬럼 GROUP은 끝까지 남는다.
ROLLUP 함수를 몰랐을 때는, 집계함수를 조회해서 서블릿이나 뷰쪽에서 집계함수의 합계를 한번 더 계산하여 그리드 마지막에 표출되도록 커스텀을 했다.
ROLLUP 함수를 사용하여 해당 합계 행을 ORDER BY를 통해 손쉽게 해결할 수 있었다.
728x90
반응형
'Database > SQL' 카테고리의 다른 글
[Oracle] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 (TRUNC 활용) (0) | 2021.11.10 |
---|---|
[Oracle] TRUNC 함수 사용방법 (날짜, 시간, 요일, 숫자) (0) | 2021.11.10 |
[Oracle] "ORA-06502: PL/SQL: 수치 또는 값 오류: 문자열 버퍼가 너무 작습니다" 오류 해결 (0) | 2021.04.30 |
[MySQL] 현재 날짜와의 차이 계산하기 : 일 차, 주 차, 월 차 (2) | 2021.01.26 |
[Oracle] 행열 변환, 오라클 PIVOT 테이블 사용 방법 (0) | 2021.01.13 |
댓글