본문 바로가기
  • BLG-ZYNGIROK-모토-꿈꾸며-배우고-나누며-이루다
ICT/SQL

SQL 문법 | 데이터 조회 및 필터 | GROUPING SETS

by dazwischen 2021. 9. 12. 13:42
반응형

같은 데이터를 한 번에 다양한 조건으로 묶어서 조회해 보고 싶을 때가 있다. 그럴 때 사용 하는 것이 GROUPING SETS이다. 본 포스트에서는 GROUPING SETS를 어떻게 작성하고 이용하는지 살펴본다.

GROUPING SETS

SQL 문법 데이터 조회 필터 GROUPING SETS

같은 데이터를 한 번에 여러번 그룹핑 할 수 있는 기능을 SQL에서는 GROUPING SETS를 통해서 제공한다.

01 GROUPING SETS : 원하는 만큼 기준을 설정하자

GROUPING SETS는 GROUP BY와 다른 점은 여러가지 GROUP BY 문을 한 번에 돌릴 수 있도록 돕는다. GROUP BY에서 제공하는 순서쌍은 딱 그 순서쌍을 모두 만족하는 경우를 하나의 경우로 인식해 데이터를 추출한다.  GROUPING SETS에서는 괄호 안에 또 순서쌍을 넣어서 원하는 만큼의 조합의 결과를 한 번에 추출가능하다.

SELECT		COL1, COL2, COL3
FROM		TABLE
GROUP BY
		GROUPING SETS	( (COL1), (COL2, COL3), (COL1, COL2, COL3) )
;

위와 같이 쿼리문 (SQU문)을 작성했을 시 결과는 (1) COL1 별로, (2) COL2와 COL3 별로, (3) COL1과 COL2와 COL3 별로 총 3가지의 데이터를 얻을 수 있다. 다시 말해서 원하는 만큼 기준을 한 번에 설정할 수 있다.

EXAMPLE

SHOP의 역대 월별 매출 소계와 연도별 월변 매출 소계를 알려주세요.

SELECT		YEAR, MONTH, SUM(AMOUNT)
FROM		SHOP
GROUP BY
		GROUPING SETS	( (MONTH), (YEAR, MONTH) )
;

02 UNION ALL을 이용한 경우와 같다

GROUPING SETS이 얼마나 간단한지는 같은 결과를 GROUPING SETS를 사용하지 않고 어떻게 얻을 수 있는지를 고민해 보면 바로 알 수 있다. 위의 쿼리를 GROUPING SETS를 이용하지 않고 UNION ALL을 이용해서 구해보자.

EXAMPLE

SHOP의 역대 월별 매출 소계와 연도별 월변 매출 소계를 알려주세요.

SELECT		NULL, MONTH, SUM(AMOUNT)
FROM		SHOP
GROUP BY	MONTH
UNION ALL
SELECT 		YEAR, MONGTH, SUM(AMOUNT)
FROM		SHOP
GROUP BY 	(YEAR, MONTH)
;

UNION ALL을 이용하면 GROUP BY 절 외에은 완전히 같은 쿼리문을 GROUPING SETS에서 적어준 경우의 수 만큼 작성해 줘야 한다. 한 가지 주의할 점은 UNION ALL로 합칠 결과 셋의 컬럼수는 동일해야 한다. 따라서 특정 컬럼을 조회하지 않아도 되는 쿼리문에서는 NULL로 컬럼의 수를 맞춰줘야 한다. *필요 없는 컬럼을 GROUP BY를 사용하는 쿼리문에서 불러 온다면 오류를 일으키게 된다.

반응형

댓글