`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, ...)`**는 주어진 열들에 대한 다양한 수준의 집계를 자동으로 생성합니다.
'Data Analysis 데이터 분석 > SQL 통한 Database 관리' 카테고리의 다른 글
max(연봉) over (order by 연봉 desc rows current row) as col3 (0) | 2024.08.19 |
---|---|
order by 연봉 desc 할때, 연봉값은 같고 사원id 가 다른 두개 있을때 누가 먼저 (0) | 2024.08.19 |
roll up, cube, grouping sets언제 뭐써야 하는지 어떻게 알까 (0) | 2024.08.19 |
groupung sets 예시에 대해 알려줘 (0) | 2024.08.19 |
cube() 인자 쓰는법 (0) | 2024.08.18 |