[SQLD/P] SQL 집계함수

Hyo Kyun Lee·2022년 12월 8일
0

SQLD/P

목록 보기
64/82

1. 개요

집계함수라 하면 GROUP BY를 많이 떠올릴 것이다.

하지만 SQL에는 GROUP BY 집계함수와 함께, 해당 그룹을 다시 소그룹으로 나누어 세부항목별 집계연산을 지원하는 별도의 집계함수가 존재한다.

2. 집계함수 활용구문

SELECT ~~ (소그룹별 집계할 대상 나열)
FROM ~~
GROUP BY **ROLLUP/CUBE/GROUPING SETS**(세부집계그룹항목)

2-1. ROLLUP

SELECT PRODUCT_ID, MONTH, SUM(SALES_QUANTITY)
FROM SALES
GROUP BY ROLLUP(PRODUCT_ID, MONTH)

기본적으로 PRODUCT_ID와 MONTH를 그룹화하여 집계한다.

이 집계한 결과를 바탕으로, ROLLUP에서 세부그룹항목으로 기재한 항목중 PRODUCT_ID를 기준으로 세부집계를 진행한다.

최종적으로 PRODUCT_ID와 MONTH 두 항목에 대해 세부집계를 진행한다.

2-2. CUBE

SELECT PRODUCT_ID, MONTH, SUM(SALES_QUANTITY)
FROM SALES
GROUP BY CUBE(PRODUCT_ID, MONTH)

기본적으로 PRODUCT_ID와 MONTH를 그룹화하여 집계한다.

이 집계한 결과를 바탕으로, CUBE에서 세부그룹항목으로 기재한 모든 항목에 대해 각각 세부집계를 진행한다.

최종적으로 PRODUCT_ID와 MONTH 두 항목에 대해 세부집계를 진행한다.

2-3. GROUPING SETS

SELECT PRODUCT_ID, MONTH, SUM(SALES_QUANTITY)
FROM SALES
GROUP BY GROUPING SETS(PRODUCT_ID, MONTH)

기본적으로 PRODUCT_ID와 MONTH를 그룹화하여 집계한다.

이 집계한 결과를 바탕으로, GROUPING SETS에서 지정한 세부그룹항목에 대해 각각 세부집계를 진행한다.

3. GROUPING

SELECT 
    PRODUCT_ID, MONTH, SUM(SALES_QUANTITY)
   ,CASE GROUPING(PRODUCT_ID) = 1 THEN '상품ID에 대한 합계' ELSE '-' END AS 상품ID 소계여부
   ,CASE GROUPING(MONTH) = 1 THEN '월에 대한 합계' ELSE '-' AS 월 소계여부
FROM SALES
GROUP BY ROLLUP(PRODUCT_ID, MONTH)

기본적으로 PRODUCT_ID와 MONTH를 그룹화하여 집계한다.

이 집계한 결과를 바탕으로, 지정한 집계함수 및 세부그룹항목에 대해 각각 세부집계를 진행한다.

세부집계 진행시 GROUPING 조건절에서 지정한 COLUMN명으로 결과를 출력하며, 이 조건절은 GROUPING 키워드를 사용한다(해당 세부집계항목일 경우 1을 반환하고, 아니면 0을 반환).

※ GORUP BY -> 그룹화 대상, GROUPING -> 집계 대상

4. 참고자료

이 블로그 포스트에 집계함수에 대한 모든 내용이 들어있다 - https://for-my-wealthy-life.tistory.com/44
GROUPING 개념 - https://jhnyang.tistory.com/473

0개의 댓글