본문 바로가기
개발농장/DataBase

[오라클sql] 그룹함수 | ROLLUP, CUBE, GROUPING SETS, GROUPING 에 대해 알아보자!

by 176의장 2023. 2. 20.
반응형

소계/총계 함수

1) ROLLUP

2) CUBE

3) GROUPING SETS

4) GROUPING


1) ROLLUP

  • ROLL_UP(A) : A 그룹핑 -> 합계
  • ROLL_UP(A, B) : A, B 그룹핑 -> A소계 / 합계
  • ROLL_UP(A, B, C) : A, B, C 그룹핑 -> (A소계, B소계) / 합계
SELECT ORDER_DT
     , MENU_NAME
     , SELLER
     , COUNT(*)
  FROM CAFE
--GROUP BY ROLLUP(ORDER_DT) 
--GROUP BY ROLLUP(ORDER_DT, MENU_NAME)
GROUP BY ROLLUP (ORDER_DT, MENU_NAME, SELLER)
;

rollup01

주문날짜에 대한 메뉴별 판매한 음료의 소계

주문날짜에 대한 판매한 음료의 소계

총 판매한 음료의 합계


2) CUBE

  • CUBE(A) : A 그룹핑 -> 합계
  • CUBE(A, B) : A, B 그룹핑 / A 그룹핑 / B 그룹핑 -> A소계, B소계 / 합계
  • CUBE(A, B, C) : A, B, C 그룹핑 / A, B 그룹핑 / A, C 그룹핑 / B, C 그룹핑 / A 그룹핑 / B 그룹핑 / C 그룹핑 -> (A소계, B소계), (A소계), (B소계) / 합계
SELECT ORDER_DT
     , MENU_NAME
     , SELLER
     , COUNT(*)
  FROM CAFE
--GROUP BY CUBE(ORDER_DT)
--GROUP BY CUBE(ORDER_DT, MENU_NAME)
GROUP BY CUBE (ORDER_DT, MENU_NAME, SELLER)
ORDER BY ORDER_DT
;

cube01

주문날짜에 대한 메뉴별 판매한 음료의 소계
주문날짜에 대한 판매한 음료의 소계

메뉴별 판매한 음료의 소계

총 판매한 음료의 합계


3) GROUPING SETS

  • GROUPING SETS(A, ()) : A 그룹핑 -> 합계
  • GROUPING SETS(A, B, ()) : A 그룹핑 / B 그룹핑 -> 합계
SELECT ORDER_DT
     , MENU_NAME
     , SELLER
     , COUNT(*)
  FROM CAFE
--GROUP BY GROUPING SETS(ORDER_DT, ())
--GROUP BY GROUPING SETS(ORDER_DT, MENU_NAME, ())
GROUP BY GROUPING SETS(ORDER_DT, MENU_NAME, SELLER, ())
ORDER BY ORDER_DT, MENU_NAME, SELLER
;

groupingsets01

주문날짜별 판매한 음료 수
메뉴별 판매한 음료 수
판매자별 판매한 음료 수
총 판매한 음료의 합계


4) GROUPING

  • ROLLUP, CUBE, GROUPING SETS 함수를 사용할 때 소계 자리에 NULL 대신에 텍스트를 쓸 수 있게 해주는 함수이다.
SELECT ORDER_DT
     , MENU_NAME
     , DECODE(GROUPING(SELLER), 1, 'TOTAL', SELLER) ASSELLER
     , COUNT(*)
  FROM CAFE
GROUP BY GROUPING SETS(ORDER_DT, ROLLUP(MENU_NAME, SELLER))
ORDER BY ORDER_DT, MENU_NAME, SELLER
;

grouping01

GROUPING을 이용하여 SELLER 컬럼부분에 NULL 대신 'TOTAL'이 출력됨을 확인 할 수 있다.

 

그룹함수(소계)에 대해 알아보았다.
소계 생성으로 인해 출력되는 데이터양이 많아서 처음엔 당황했지만
업무를 할때 소계/합계는 거의 필수로 짜기 때문에 아주 유용한 함수라고 생각한다.
이것 또한 한 동안 쓰지 않으면 헷갈릴 수 있으니 복습차 포스팅해본다:)
혹시나 테이블/데이터 생성이 힘든사람을 위해 별거 아니지만
sql문을 첨부파일로 올려놓겠다.


데이터생성sql.txt
0.00MB


본 게시글 작성 시 2022 유선배 SQL 개발자(SQLD) 괴외노트 참고 하였습니다.

 

반응형

댓글