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

hyunsooSong·2022년 5월 24일
0

SQL

목록 보기
7/14
post-thumbnail

💭 Oracle 그룹함수

1. ROLLUP (계층 구조 집계)

✅ ROLLUP 함수는 소그룹간의 합계와 전체 합계를 계산할 때 사용하는 함수이다.

  • 주의!! 첫번째 인자에 대한 소계(SUBTOTAL)와 총계(GRAND TOTAL)의 결과가 나오기 때문에 나열된 컬럼의 순서가 변경되면 수행 결과도 변경된다.

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


2. CUBE (다차원 집계)

✅ CUBE 함수는 결합 가능한 모든 값에 대하여 다차원 집계를 생성한다. (집합의 특징을 가짐)

  • 결과에 대한 정렬이 필요한 경우 ORDER BY절에 명시적으로 정렬 컬럼이 표시 되야한다.

  • CUBE는 인자로 주어진 컬럼의 결합 가능한 모든 조합에 대해서 집계를 수행하므로 다른 그룹 함수에 비해 시스템에 대한 부하가 크다.

  • 그룹핑 컬럼의 개수가 n일 때, 2의 n승의 소계를 생성한다.

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


3. GROUPING SETS (개별 집계)

✅ GROUPING SETS는 표시된 인수들에 대한 개별 집계를 구한다.

  • CUBE와 마찬가지로 결과에 대한 정렬이 필요한 경우 ORDER BY절에 명시적으로 정렬 컬럼이 표시 되야한다.

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


💫 CUBE와 GROUPING SETS

  • ROLLUP과 달리 평등 관계이므로 인수의 순서가 바뀌어도 동일한 결과가 출력된다.

  • CUBE의 인자에 대한 모든 가능한 집합을 GROUPING SETS로 표현하면 동일한 결과가 출력된다.

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

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


4. GROUPING

✅ GROUPING 함수는 ROLLUP, CUBE, GROUPING SETS를 지원하는 역할을 한다.

  • GROUPING(표현식) = 1 : 집계가 계산된 결과
  • GROUPING(표현식) = 0 : 집계가 계산되지 않은 결과

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


+ 👀 틈새 지식

💡 CUBE, GROUPING SETS, ROLLUP 특징 2가지

  • CUBE, GROUPING SETS, ROLLUP는 함수들의 대상 컬럼 중 집계된 컬럼 이외의 대상 컬럼 값은 NULL을 반환한다.
  • 일반 그룹 함수를 사용하여 CUBE, GROUPING SETS, ROLLUP와 같은 결과를 추출 할 수 있다.
profile
🥕 개발 공부 중 🥕

0개의 댓글