그룹 함수 심화와 윈도우 함수

이강용·약 11시간 전

SQLD

목록 보기
13/13

ROLLUP

ROLLUP의 개념

  • 일반 GROUP BY는 지정한 컬럼 조합 하나로만 그룹화함
  • 부서별 합계와 함께 전체 총계도 한 번에 보고 싶을 때가 있음
  • 일반 GROUP BY로는 별도의 SELECT를 UNION ALL로 붙여야함
  • ROLLUP은 GROUP BY의 확장 구문으로 소계와 총계를 한 번에 만듦
  • ROLLUP은 앞 컬럼부터 차례로 묶음을 줄여가며 계층적 소계를 생성
  • 소계·총계 행에서 그룹화에 쓰이지 않은 컬럼은 NULL로 채워짐
GROUP BY ROLLUP(컬럼1, 컬럼2,...)
구문생성하는 그룹
ROLLUP(A)A별 그룹, 전체 총계
ROLLUP(A,B)(A,B)별, A별 소계, 전체 총계
ROLLUP(A,B,C)(A,B,C)별, (A,B)별, A별, 전체 총계

부분 ROLLUP과 복합 컬럼

  • ROLLUP은 GROUP BY절에서 일반 컬럼과 함께 쓸 수 있음
  • ROLLUP 밖의 컬럼은 항상 그룹화 기준으로 고정
  • 고정된 컬럼에 대해서는 소계·총계가 만들어지지 않음
  • 두 컬럼을 괄호로 묶으면 ROLLUP은 이를 한 컬럼처럼 취급
  • 묶음 안의 부분 조합과 소계는 생성되지 않음

CUBE / GROUPING SETS

CUBE

  • CUBE는 지정한 컬럼으로 만들 수 있는 모든 조합을 그룹화함
  • ROLLUP이 앞 컬럼 기준 소계만 만드는 것과 달리, CUBE는 뒤 컬럼 기준 소계까지 만듦
  • 컬럼이 n개면 그룹의 종류는 2^n승임
  • 모든 조합을 만들므로 컬럼 순서는 결과에 영향을 주지 않음
  • 소계·총계 행은 그룹화에 쓰이지 않은 컬럼이 NULL로 채워짐
GROUP BY CUBE(컬럼1, 컬럼2,...)

GROUPING SETS

  • GROUPING SETS는 원하는 그룹화 조합만 직접 나열
  • 나열한 조합에 대해서만 집계하므로 불필요한 소계가 없음
  • 빈 괄호()를 넣으면 전체 총계 행이 포함
  • ROLLUP·CUBE로 표현 할 수 없는 임의의 조합도 명시할 수 있음
GROUP BY GROUPING SETS(조합1, 조합2,...)

GROUPING 함수

GROUPING 함수의 역할

  • GROUPING 함수는 ROLLUP·CUBE·GROUPING SETS에서 생성된 행이 어떤 종류인지 식별하는 함수임
  • GROUPING 컬럼은 0또는 1을 반환
  • 0: 해당 컬럼이 그룹화에 사용된 일반 그룹 행
  • 1: 해당 컬럼이 그룹화에 사용되지 않은 소계·총계 행(NULL로 채워진 행)
  • ROLLUP·CUBE 결과의 NULL과 소계·총계가 만든 NULL은 두 종류로 나뉨
    • 원본 데이터의 NULL과 소계·총계가 만든 NULL
  • GROUPING 함수가 이 둘을 구분하는 유일한 방법임
  • 그룹화 함수가 아닌 ROLLUP·CUBE 결과 가공용 함수임
profile
HW + SW = 1

0개의 댓글