SQL GROUPING SETS 쉽게 이해하기
GROUPING SETS란?
GROUPING SETS는 SQL에서 데이터를 다양한 그룹화 수준에서 집계하는 기능을 제공하는 절입니다. 일반적으로 GROUP BY 절과 함께 사용되며, 그룹화된 결과를 여러 그룹화 조합에 대해 한 번에 반환할 수 있습니다. 이를 통해 다양한 관점에서 데이터를 분석하고 비교할 수 있습니다.
GROUPING SETS는 여러 그룹화 열의 조합을 지정하는 방식으로 사용됩니다. 이러한 조합은 GROUP BY 절 내에 괄호로 묶어 나열됩니다. 각 그룹화 조합은 쉼표로 구분되며, 괄호 안에 그룹화할 열을 나열합니다.
예시
다음과 같은 Sales 테이블이 있다고 가정해 봅시다.
| Product | Category | Region | Amount |
|---------|----------|--------|--------|
| A | X | East | 100 |
| B | X | West | 200 |
| C | Y | East | 150 |
| A | Y | West | 300 |
이 테이블에서 Product, Category, Region에 대한 그룹화를 수행하고 Amount를 합계로 집계해보겠습니다. 기존의 GROUP BY 절로는 다음과 같이 그룹화할 수 있습니다.
SELECT Product, Category, Region, SUM(Amount)
FROM Sales
GROUP BY Product, Category, Region;
| Product | Category | Region | SUM(Amount) |
|---------|----------|--------|-------------|
| A | X | East | 100 |
| B | X | West | 200 |
| C | Y | East | 150 |
| A | Y | West | 300 |
이제 grouping sets를 사용하여 다양한 그룹화 조합을 가져와 보겠습니다. grouping sets는 GROUP BY 절 내에 여러 그룹화 열을 나열하여 사용됩니다.
SELECT Product, Category, Region, SUM(Amount)
FROM Sales
GROUP BY GROUPING SETS ((Product, Category, Region), (Product, Category), (Product), ());
위의 쿼리는 4개의 그룹화 조합을 생성합니다.
1. (Product, Category, Region): 모든 열을 그룹화하여 결과를 반환합니다.
2. (Product, Category): Product와 Category 열을 그룹화하여 결과를 반환합니다.
3. (Product): Product 열만 그룹화하여 결과를 반환합니다.
4. (): 그룹화를 수행하지 않고 모든 행을 하나의 그룹으로 반환합니다.
| Product | Category | Region | SUM(Amount) |
|---------|----------|--------|-------------|
| A | X | East | 100 |
| A | Y | West | 300 |
| B | X | West | 200 |
| C | Y | East | 150 |
| A | X | NULL | 100 |
| A | Y | NULL | 300 |
| B | X | NULL | 200 |
| C | Y | NULL | 150 |
| A | NULL | NULL | 400 |
| B | NULL | NULL | 200 |
| C | NULL | NULL | 150 |
| NULL | NULL | NULL | 750 |
위 결과에서 볼 수 있듯이, grouping sets를 사용하면 다양한 그룹화 조합의 결과를 한 번에 얻을 수 있습니다. 추가적으로 그룹화된 결과에 대한 합계 또는 기타 계산을 수행할 수도 있습니다. 이를 통해 데이터의 다양한 관점에서 집계 결과를 분석할 수 있습니다.