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

roll up 인자 안에 괄호 있는 경우, 없는경우 예시로 보여줘

Queen Julia 2024. 8. 18. 17:01

`ROLLUP` 함수는 SQL에서 계층적 집계를 수행할 때 사용되는 함수로, 주어진 열 목록에 대해 점진적으로 상위 집계를 생성합니다. `ROLLUP`에서 인자에 괄호를 사용할 수 있으며, 이는 집계의 계층 구조를 명확하게 정의하는 데 유용합니다.

### `ROLLUP` 구문

```sql
SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY ROLLUP(column1, column2);
```

### 인자 안에 괄호가 없는 경우

이 경우, 열들이 순차적으로 그룹핑되며, 각 단계별로 상위 집계를 계산합니다.

#### 예시 테이블

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

| year | region | product | sales_amount |
|------|--------|---------|--------------|
| 2023 | East   | A       | 100          |
| 2023 | East   | B       | 150          |
| 2023 | West   | A       | 200          |
| 2023 | West   | B       | 250          |
| 2024 | East   | A       | 120          |
| 2024 | East   | B       | 130          |
| 2024 | West   | A       | 220          |
| 2024 | West   | B       | 270          |

#### 예시 쿼리

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

### 결과

| year | region | total_sales |
|------|--------|-------------|
| 2023 | East   | 250         |  -- 2023년 East 지역의 총 판매
| 2023 | West   | 450         |  -- 2023년 West 지역의 총 판매
| 2023 | NULL   | 700         |  -- 2023년의 전체 총 판매
| 2024 | East   | 250         |  -- 2024년 East 지역의 총 판매
| 2024 | West   | 490         |  -- 2024년 West 지역의 총 판매
| 2024 | NULL   | 740         |  -- 2024년의 전체 총 판매
| NULL | NULL   | 1440        |  -- 전체 총 판매

### 해석

- 먼저 `year`와 `region`을 기준으로 집계.
- 그런 다음 `year` 단위로 상위 집계 (지역을 무시).
- 마지막으로 전체 합계를 계산.

### 인자 안에 괄호가 있는 경우

괄호를 사용하면 특정 열들을 그룹으로 묶어 동일한 계층 수준에서 집계를 수행하게 됩니다.

#### 예시 쿼리

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

### 결과

| year | region | product | total_sales |
|------|--------|---------|-------------|
| 2023 | East   | A       | 100         |  -- 2023년 East 지역의 A 제품 판매
| 2023 | East   | B       | 150         |  -- 2023년 East 지역의 B 제품 판매
| 2023 | East   | NULL    | 250         |  -- 2023년 East 지역의 총 판매
| 2023 | West   | A       | 200         |  -- 2023년 West 지역의 A 제품 판매
| 2023 | West   | B       | 250         |  -- 2023년 West 지역의 B 제품 판매
| 2023 | West   | NULL    | 450         |  -- 2023년 West 지역의 총 판매
| 2023 | NULL   | NULL    | 700         |  -- 2023년의 전체 총 판매
| 2024 | East   | A       | 120         |  -- 2024년 East 지역의 A 제품 판매
| 2024 | East   | B       | 130         |  -- 2024년 East 지역의 B 제품 판매
| 2024 | East   | NULL    | 250         |  -- 2024년 East 지역의 총 판매
| 2024 | West   | A       | 220         |  -- 2024년 West 지역의 A 제품 판매
| 2024 | West   | B       | 270         |  -- 2024년 West 지역의 B 제품 판매
| 2024 | West   | NULL    | 490         |  -- 2024년 West 지역의 총 판매
| 2024 | NULL   | NULL    | 740         |  -- 2024년의 전체 총 판매
| NULL | NULL   | NULL    | 1440        |  -- 전체 총 판매

### 해석

- `region`과 `product`를 그룹으로 묶었기 때문에, `region`과 `product`가 함께 상위 집계로 처리됩니다.
- `year` 기준으로 먼저 그룹핑한 다음, `region, product` 조합에 대한 상위 집계를 계산합니다.

### 요약

- **괄호 없는 경우**: `ROLLUP`은 인자들을 계층적으로 처리하여 순차적으로 상위 집계를 수행합니다.
- **괄호 있는 경우**: 특정 인자들을 그룹으로 묶어 동일한 수준에서 집계하도록 설정합니다.

`ROLLUP`의 괄호 사용 여부에 따라 집계 방식과 결과가 달라지므로, 필요한 분석의 수준과 범위에 맞춰 적절하게 사용해야 합니다.