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
728x90
'자격증 > SQLD' 카테고리의 다른 글
[SQLD] SQL 활용 - DCL(Data Control Language) (0) | 2023.08.31 |
---|---|
[SQLD] SQL 활용 - 윈도우 함수 (0) | 2023.08.31 |
[SQLD] SQL 활용 - 서브쿼리(Subquery) (0) | 2023.08.31 |
[SQLD] SQL 활용 - 계층형 질의 (0) | 2023.08.31 |
[SQLD] SQL 활용 - 집합연산자 (SET OPERATOR) (0) | 2023.08.31 |