[SQLD] 그룹 함수

younghyun·2023년 6월 8일
0

SQLD

목록 보기
11/18

GROUP BY절

SELECT 상품ID,, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY 상품ID,;

GROUPING 함수

GROUPING 함수: ROLLUP, CUBE, GROUPING SETS를 지원하는 역할

SELECT 
    CASE GROUPING(상품ID) WHEN 1 THEN '모든 상품ID' ELSE 상품ID END AS 상품ID,
    CASE GROUPING() WHEN 1 THEN '모든 월' ELSEEND AS, 
    SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY ROLLUP(상품ID,);

집계가 계산된 결과에 GROUPING(표현식) = 1
그 외에는 GROUPING(표현식) = 0

ROLLUP 함수

SELECT 상품ID,, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY ROLLUP(상품ID,);

그에 대한 소계(SUBTOTAL), 총계(GRAND TOTAL)가 모두 나온다.
ROLLUP함수는 인수의 순서에도 영향을 받게 된다.

CUBE 함수

SELECT 상품ID,, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY CUBE(상품ID,);

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

GROUPING SETS 함수

SELECT 상품ID,, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY GROUPING SETS(상품ID,);

첫번째 인자(상품ID)별 소계(SUBTOTAL), 두번째 인자(월)별 소계(SUBTOTAL)이 나오는 것을 확인할 수 있다.
괄호로 묶은 집합별로 집계를 구할 수 있다.
ROLLUP과 CUBE와 달리 계층 구조가 나타나지 않으며 따라서 인자의 순서가 달라도 결과는 똑같다.

[105번]
ROLLUP: GROUP BY절 데이터, 지역별 합계, 전체 집계
CUBE: GROUP BY절 데이터, 지역별 합계, 월별 합계, 전체 집계
GROUPING SETS: 지역별 합계, 월별 합계

[108번]
CUBE, GROUPING SETS, ROLL UP 모두 일반 그룹 함수로 동일한 결과를 추출할 수 있다.

[109번]

// 두 결과는 같다
GROUP BY CUBE (A.설비ID, B.에너지코드)
GROUP BY GROUPING SETS ((A.설비ID), (B.에너지코드), (A.설비ID, B.에너지코드), ())

[111번]

GROUP BY GROUPING SETS ((상품ID,))

이 결과는 GROUP BY절과 같다.
하나의 인자별로 집계가 되기 때문에 GROUP BY 그 자체이다.

profile
🌱 주니어 백엔드 개발자입니당

0개의 댓글