[SQLD] GROUPING, GROUPING SETS, ROLLUP, CUBE

도지는·2024년 3월 6일

SQLD

목록 보기
5/8

🔎 3줄 요약

ROLLUP: 첫번째 인자에 대해 소그룹+전체 합계(순서상관)
CUBE: 결합 가능한 모든 값에 대해 집계(순서 상관 x)
GROUPING SETS: 입력된 인자에 대해 소계(순서 상관 x)

GROUPING

소계, 합계로 집계된 컬럼 값이 NULL이면 1, 아니면 0 반환

  • CASE WHEN 같은 구문에서 사용
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,);
  • 출력 시 NULL 대신 출력될 문자, 숫자들 지정할 때

ROLLUP

소그룹 간의 소계를 계산

  • 인자가 여러개 전달되어도 첫번째 값에 대해서만 합계 계산
  • 마지막 최종 소계도 계산
  • 인자 순서에 따라 결과가 다름
GROUP BY CUBE(컬럼1, 컬럼2)
=
GROUP BY 컬럼1, 컬럼2
UNION ALL
GROUP BY 컬럼1
UNION ALL
모든 집합 그룹 결과

CUBE

결합 가능한 모든 값에 대하여 다차원 집계 생성

  • 정렬이 필요한 경우 ORDER BY 절에 명시적으로 정렬 칼럼을 표시해야함
  • 인수의 순서가 바뀌면 정렬은 다를 수 있지만 결과는 같음 (모든 경우의 소계를 출력하기 때문)
  • 2ᴺ개의 소계 생성(그룹핑 컬럼이 N개 일때)
GROUP BY CUBE(컬럼1, 컬럼2)
=
GROUP BY 컬럼1, 컬럼2
UNION ALL
GROUP BY 컬럼1
UNION ALL
GROUP BY 컬럼2
UNION ALL
모든 집합 그룹 결과

GROUPING SETS

다양한 소계 집합을 만듦
표시된 인수들에 대한 개별 집계를 구함(소계가 필요한 것들만 넣음)

  • 계층 구조가 아니라 평등한 관계 이므로 인수의 순서가 바뀌어도 결과는 같음
    결과에 대한 정렬이 필요한 경우에는 ORDER BY 절에 명시적으로 정렬 칼럼이 표시되어야 함
  • 전체 합계는 안보여줌. 소계만.

🔗 참고

SQL 집계함수 - ROLLUP, CUBE, GROUPING SETS

profile
왕왕

0개의 댓글