Data Analysis 데이터 분석/SQL 통한 Database 관리

roll up 함수

Queen Julia 2024. 8. 19. 00:16

`ROLLUP`은 SQL에서 그룹별로 데이터를 집계할 때, 다양한 수준의 집계 결과를 한 번에 구하는 데 사용되는 기능입니다. 주로 보고서와 같은 다차원 분석에서 유용합니다.

### `ROLLUP` 기본 개념

`ROLLUP`은 `GROUP BY`와 함께 사용되며, 지정된 열에 대해 계층적인 집계를 생성합니다. `ROLLUP`은 상위 수준으로 그룹화된 집계를 자동으로 생성하기 때문에, 기본 그룹화 결과뿐 아니라 각 그룹의 소계, 전체 합계를 포함하는 결과를 생성할 수 있습니다.

### 구문

```sql
SELECT [columns], aggregate_function([column])
FROM [table]
GROUP BY ROLLUP(column1, column2, ...)
```

### 작동 방식

`ROLLUP(column1, column2, ...)`은 다음과 같은 방식으로 작동합니다:

1. **그룹화된 결과**: 주어진 순서대로 컬럼을 그룹화합니다.
2. **상위 수준 집계**: 마지막 컬럼부터 순차적으로 제거하며, 상위 그룹에 대한 집계를 생성합니다.
3. **전체 합계**: 모든 컬럼이 제거된 전체 집계도 포함됩니다.

### 예제

#### 예제 테이블

아래와 같은 `sales` 테이블이 있다고 가정합니다:

| region | product | sales_amount |
|--------|---------|--------------|
| East   | A       | 100          |
| East   | B       | 150          |
| West   | A       | 200          |
| West   | B       | 250          |

#### 예제 쿼리

```sql
SELECT region, product, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY ROLLUP(region, product);
```

#### 결과

이 쿼리의 결과는 다음과 같습니다:

| region | product | total_sales |
|--------|---------|-------------|
| East   | A       | 100         |
| East   | B       | 150         |
| East   | NULL    | 250         | -- East 지역의 총 판매합계
| West   | A       | 200         |
| West   | B       | 250         |
| West   | NULL    | 450         | -- West 지역의 총 판매합계
| NULL   | NULL    | 700         | -- 전체 판매합계

#### 결과 해석

- `East`, `West` 각각에 대해 `A`, `B`의 판매합계를 보여줍니다.
- `NULL` 값을 가진 행은 해당 수준의 집계를 나타냅니다. 예를 들어, `East` 지역의 총 판매 합계는 `250`이고, `West`는 `450`입니다.
- 마지막 행에서는 전체 판매 합계(`700`)를 보여줍니다.

### 요약

- **`ROLLUP`**은 다차원 집계 보고서를 생성하는 데 사용됩니다.
- 각 그룹의 소계와 전체 합계를 포함하는 계층적인 집계 결과를 제공합니다.
- **`GROUP BY ROLLUP(column1, column2, ...)`**는 주어진 열들에 대한 다양한 수준의 집계를 자동으로 생성합니다.