database/SQLD

[SQLD] 그룹함수 (ROLLUP, CUBE, GROUPING SETS)

sewonzzang123 2022. 3. 18.
반응형


업무 중 현황이나 결과를 한눈에 보여줘야 하는 경우가 많습니다.

이전에 작성한 글 에서는 UNION, UNION ALL 으로 병합을 했다면, 이번 글에서는 그룹함수를 이용하여 테이블을 한번만 읽어 빠르게 원하는 결과를 도출해 낼 수 있습니다.

(제가 시험쳤던 2022년 3월 12일 시험에서 소계를 계산할 때 사용하는 함수 문제가 출제되었습니다.)

2022.02.07 - [database] - [SQL] UNION / UNION ALL, WITH

 

[SQL] UNION / UNION ALL, WITH

UNION / UNION ALL UNION : 조회한 다수의 SELECT문을 하나로 합치고 싶을 때 유니온(UNION)을 사용할 수 있습니다. UNION은 UNION (DISTINCT)와 UNION ALL 문 두 가지가 있습니다. UNION (DISTINCT) : 중복되는..

sewonzzang.tistory.com

 

그룹함수의 종류

그룹함수의 종류에는 ROLLUP, CUBE, GROUPING SETS가 있습니다.

세 함수 모두 GROUP BY (ROLLUP/CUBE/GROUPING SETS)(속성명) 으로 표현합니다.

 

1. ROLLUP : 소그룹 간의 소계를 계산

2. CUBE : GROUP BY 항목들간 다차원적인 소계를 계산할 수 있음 (모든 그룹케이스를 계산)

3. GROUPING SETS : 특정 항목체 대한 소계를 계산할 수 있음 ( GROUPING SETS는 특정항목을 그룹한 다수의 SQL들을 UNION 한 것과 같음)

 

ROLLUP

ROLLUP에 의해서 생성되는 소계는 그룹핑 되는 컬럼의 수를 N개라고 했을 때, N+1 레벨의 소계가 생성됩니다.

SELECT ID, YYYYMM, SUM(PRICE) AS PRICE
FROM TABLE
GROUP BY ROLLUP(ID, YYYYMM)

위의 SQL 문을 실행해보면 ID 별 월별 가격소계가 나오게 되는데, 추가로 ID별 가격소계가 나오며, 마지막에 전체 소계가 나오게 됩니다.

id1 202202 10000
id1 202203 20000
id1 null 30000
id2 202203 40000
id2 null 40000
null null 70000

 

 

CUBE

 

CUBE 함수는 그룹핑 컬럼이 가질 수 있는 모든 경우의 수에 대하여 소계(SUBTOTAL)과 총계(GRAND TOTAL)을 생성합니다.

따라서 ROLLUP 함수와는 다르게 인자의 순서가 달라도 결과는 같습니다.

위의 ROLLUP 예제와 다르게 CUBD는 월별 소계도 생성되었으며, 그룹핑 컬럼이 N개라고 한다면, 2의 N승의 소계(SUBTOTAL)을 생성합니다.

SELECT ID, YYYYMM, SUM(PRICE) AS PRICE
FROM TABLE
GROUP BY CUBE(ID, YYYYMM)
null null 70000
null 202202 10000
null 202203 60000
id1 202202 10000
id1 202203 20000
id1 null 30000
id2 202203 40000
id2 null 40000

 

GROUPING SETS

 

GROUPING SETS 는 위의 ROLLUP과 CUBE와는 다르게 계층이 나타나지 않고 그룹핑된 결과값만을 보여줍니다.

GROUPING SETS 는 괄호로 묶은 집합별로의 집계 역시 구할 수 있다,

(GROUPING SETS((ID, YYYYMM), NAME))

SELECT ID, YYYYMM, SUM(PRICE) AS PRICE
FROM TABLE
GROUP BY GROUPING SETS(ID, YYYYMM)
id1 null 30000
id2 null 40000
null 202202 10000
null 202203 60000

 

 

 


 

https://limkydev.tistory.com/149

 

[SQLD] 제2장 - 그룹함수(CUBE, ROLLUP, GROUPING SETS)_1

그룹 함수(GROUP FUNCTION)의 필요성 결산 개념의 업무를 가지는 원가나 판매 시스템의 경우는 소계, 중계, 합계, 총 합계 등 여러 레벨의 결산 보고서를 만드는 것이 중요 업무 중의 하나입니다. 개

limkydev.tistory.com

https://velog.io/@dongchyeon/%EC%98%A4%EB%9D%BC%ED%81%B4Oracle-%EA%B7%B8%EB%A3%B9-%ED%95%A8%EC%88%98-ROLLUP-CUBE-GROUPING-%EB%93%B1

 

[오라클(Oracle)] 그룹 함수 (ROLLUP, CUBE, GROUPING 등)

그룹 함수에 대해 정리해보자.

velog.io

 

반응형

'database > SQLD' 카테고리의 다른 글

[SQLD] Database 에서의 NULL  (0) 2022.02.14
[SQLD] 단일행 함수, 다중행 함수  (0) 2022.02.13
[SQLD] 반정규화(Denormalization)  (0) 2022.02.11
[SQLD] 정규화(Normalization)  (0) 2022.02.11
[SQLD] 식별자  (0) 2022.02.11

댓글