GROUP FUNCTION 는
소그룹 간의 소계를 계산하는 ROLLUP,
특정항목에 대한 소계를 계산하는 GROUPING SETS 함수 총 3가지가 있습니다. - 글 바로가기
이중 컬럼을 그룹화여 부분합, 합계, 소계 등을 할수있는 그룹함수에 대해서 알아보자
1. ROLLUP 함수
롤업은 소계를 위해 사용되는 함수이며, 모든 그룹함수는 group by와 함께 쓰인다
select * from test1
예제에 사용할 test1 테이블
Rollup은 Aggregation함수 (sum, count, 등 )과 함께 그룹화 기준을 통해 소계를 내는데 유용하게 쓰인다.
ex > rollup + count(*)
select col1,col2,count(*)
from test1
group by rollup(col1,col2)
ex > rollup + sum()
select col1,sum(col2) as COL2합
from test1
group by rollup(col1)
실전 응용 EX > C_CUST_BASE 라는 기업의 고객테이블
-- rollup은 그룹화의 sub합
select NVL(AGES_DIV_CD,'합') 연령대
,case SEX_CD when '1' then '남자' when '2' then '여자' else 'subtotal' end as 성별
,count(*) 고객수
from c_Cust_base
group by rollup (AGES_DIV_CD, SEX_CD)
order by AGES_DIV_CD
;
c_cust_base라는 고객 테이블을 이용해 성별, 연령대별 고객수를 뽑았다. (NVL, case문은 안보셔도 무방합니다)
연령대별, 성별 고객의 수를 구하는데, 여기서 중요한것은 rollup은 group by 순서가 중요하다.
Rollup 사용시 주의할점!
그룹화 순서변경시 subtotal 값 생성 기준이 변경된다.!
-- rollup은 그룹화의 sub합
select NVL(AGES_DIV_CD,'합') 연령대
,case SEX_CD when '1' then '남자' when '2' then '여자' else 'subtotal' end as 성별
,count(*) 고객수
from c_Cust_base
group by rollup (sex_cd,AGES_DIV_CD)
order by sex_cd
;
group by rollup (AGES_DIV_CD, SEX_CD) -> (SEX_CD , AGES_DIV_CD)
(보는데 편이를 위해 값은 order by 기준을 재정렬해주었음 주목할것은 그룹화 순서임)
'Work > DataBase' 카테고리의 다른 글
[SQLD] 그룹함수 - GROUPING SETS 예문, 총정리 (0) | 2020.07.02 |
---|---|
[SQLD] 그룹함수 - CUBE 예문, 총정리 (0) | 2020.07.02 |
[SQLD] 윈도우함수 - 비율함수 (ratio_to_report, percent_rank, cume_dist, ntile) (0) | 2020.06.28 |
[SQLD] 윈도우함수 - 순위함수(rank, dense_rank, row_number) (0) | 2020.06.28 |
[SQLD] 계층형 질의와 셀프조인 (0) | 2020.05.31 |