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)
;
주문날짜에 대한 메뉴별 판매한 음료의 소계
주문날짜에 대한 판매한 음료의 소계
총 판매한 음료의 합계
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
;
주문날짜에 대한 메뉴별 판매한 음료의 소계 주문날짜에 대한 판매한 음료의 소계
메뉴별 판매한 음료의 소계
총 판매한 음료의 합계
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
;
주문날짜별 판매한 음료 수 메뉴별 판매한 음료 수 판매자별 판매한 음료 수 총 판매한 음료의 합계
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
;
GROUPING을 이용하여 SELLER 컬럼부분에 NULL 대신 'TOTAL'이 출력됨을 확인 할 수 있다.
그룹함수(소계)에 대해 알아보았다. 소계 생성으로 인해 출력되는 데이터양이 많아서 처음엔 당황했지만 업무를 할때 소계/합계는 거의 필수로 짜기 때문에 아주 유용한 함수라고 생각한다. 이것 또한 한 동안 쓰지 않으면 헷갈릴 수 있으니 복습차 포스팅해본다:) 혹시나 테이블/데이터 생성이 힘든사람을 위해 별거 아니지만 sql문을 첨부파일로 올려놓겠다.
댓글