자격증/SQLD

[SQLD] SQLD 활용 - 그룹함수

숭코기 2023. 8. 31. 19:09
728x90

그룹함수

합계나 평균값을 계산하기 위해  SQL을 UNION, UNION ALL로 묶은 후 1개의 테이블을 여러 번 읽고 다시 재정렬 → 복잡

그룹 함수를 사용하여 하나의 SQL로 테이블을 한 번만 읽어서 빠르게 원하는 계산 가능

 

그룹함수의 종류

그룹함수 설명
ROLLUP 소그룹 간의 소계를 계산
CUBE GROUP BY 항목들 간 다차원적인 소계를 계산할 수 잇음 (모든 그룹케이스를 계산)
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);

 

RESULT

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

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

 

 

CUBE 함수

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

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

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

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

 

 

 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://for-my-wealthy-life.tistory.com/44

 

SQL 집계함수 - ROLLUP, CUBE, GROUPING SETS

SQL의 집계함수에 대해 살펴보겠습니다. 보통 GROUP BY절 외에 ROLLUP, CUBE 등 다양한 그룹함수에 대해서도 같이 알아보겠습니다. 1. GROUP BY 절 SELECT 상품ID, 월, SUM(매출액) AS 매출액 FROM 월별매출 GROUP B

for-my-wealthy-life.tistory.com

 

728x90