그룹 함수(group function) - GROUPING SETS

2020. 8. 30. 19:58✅ STUDY/SQL

안녕하세요! 
이전에 포스팅한 ROLLUP함수, CUBE함수에 이어 GROUPING SETS에 대해 알려드릴게요.
이전 포스팅을 참고해서, 그룹 함수들에 대해 모두 비교하면서 이해해보면 좋을 것 같아요:)

 

GROUPING SETS 함수

개념)
- 인수들에 대한 개별 집계를 구할 수 있습니다. GROUP BY 뒤에 GROUPING SETS() 형태로 사용합니다. 

특징)
- ROLLUP과 달리 인수들이 평등한 관계이므로 인수의 순서가 달라져도 데이터 결과는 같습니다.
- 다양한 소계 집합을 생성 가능합니다.

실제로 한번 사용한 예시를 보며 개념과 특징을 이해해봐요~!

예시에 사용된 STARBUCKS_ORDER 테이블 데이터는 유튜버 'SQL전문가  정미나'님의 쿼리를 사용했습니다.
■ 테이블 생성 및 테스트 데이터 insert 쿼리 파일 링크: https://drive.google.com/file/d/125EU1Cl4fonO9zHvDviS9qasCD2RTJAp/view

 


Q1. 날짜별, 주문 음료별 몇 잔을 팔았을까요?

(GROUPING SETS 사용)

인수들에 대한 개별 집계를 구하는 grouping sets함수를 쓰면 결과가 어떻게 나올지 눈으로 확인해봐요! 
그룹 함수이기 때문에, group by 뒤에 grouping sets이라고 적어주고 () 괄호 안에, 어떤 컬럼의 개별 소계를 하고싶은지 적어주면 된답니다.

select ORDER_DT, ORDER_ITEM, count(*) from STARBUCKS_ORDER
group by GROUPING SETS(ORDER_DT, ORDER_ITEM)
order by ORDER_DT;

-> ORDER_DATE 별 SUBTOTAL(10건), ORDER_ITEM 별 SUBTOTAL(10건)이 인출되었네요!

 


Q2. 날짜별, 주문 음료별 몇 잔을 팔았을까요? (GROUPING SETS 과 같은 결과로 인출해라)

select ORDER_DT, ORDER_ITEM, count(*) from STARBUCKS_ORDER
group by GROUPING SETS(ORDER_DT, ORDER_ITEM)
order by ORDER_DT;

select ORDER_DT, NULL, count(*) from STARBUCKS_ORDER
group by ORDER_DT
UNION ALL
select NULL, ORDER_ITEM, count(*) from STARBUCKS_ORDER
group by ORDER_ITEM
order by 1,2;

-> 위의 두 쿼리는 같은 결과를 인출합니다. GROUPING SETS에 대해 이해를 하고 계신다면 어렵지 않습니다.
기출로 많이 출제되는 문제니까 꼭 알아두세요~.~

 

* 결론 *

- 인수들에 대한 개별 집계를 구할 수 있습니다. GROUP BY 뒤에 GROUPING SETS() 형태로 사용합니다. 

- ROLLUP과 달리 인수들이 평등한 관계이므로 인수의 순서가 달라져도 데이터 결과는 같습니다.
- 다양한 소계 집합을 생성 가능합니다.