`CUBE()`는 SQL에서 다차원 집계를 수행할 때 사용하는 함수로, 지정된 모든 열의 가능한 조합에 대해 집계 결과를 생성합니다. 즉, `CUBE()`를 사용하면 여러 차원의 데이터를 다양한 수준에서 분석할 수 있습니다.
### `CUBE()` 구문
```sql
SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY CUBE(column1, column2);
```
### 인자 사용법
`CUBE()`는 `GROUP BY` 절 안에서 사용되며, 인자로 전달되는 열들의 모든 가능한 조합에 대한 집계를 생성합니다. 각 인자는 특정 집계 기준을 나타내며, `CUBE()` 내부에 여러 인자를 넣으면 그 인자들의 모든 조합에 대한 집계가 생성됩니다.
### 예시
#### 예시 테이블
아래와 같은 `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 CUBE(region, product);
```
### 결과
이 쿼리는 다음과 같은 결과를 생성합니다:
| region | product | total_sales |
|--------|---------|-------------|
| East | A | 100 | -- East 지역의 A 제품 판매 합계
| East | B | 150 | -- East 지역의 B 제품 판매 합계
| East | NULL | 250 | -- East 지역의 총 판매 합계
| West | A | 200 | -- West 지역의 A 제품 판매 합계
| West | B | 250 | -- West 지역의 B 제품 판매 합계
| West | NULL | 450 | -- West 지역의 총 판매 합계
| NULL | A | 300 | -- 모든 지역에서 A 제품 판매 합계
| NULL | B | 400 | -- 모든 지역에서 B 제품 판매 합계
| NULL | NULL | 700 | -- 전체 총 판매 합계
### 결과 해석
- **(region, product)**: 지역과 제품의 조합에 대한 집계.
- **(region)**: 각 지역별 총 집계 (제품 구분 없이).
- **(product)**: 각 제품별 총 집계 (지역 구분 없이).
- **()**: 전체 집계.
`CUBE()`는 `GROUP BY` 절에서 여러 차원의 데이터를 다양한 수준에서 분석하는 데 사용됩니다. 예를 들어, 위 쿼리에서 `CUBE(region, product)`는 `region`과 `product`의 모든 조합과 그 하위 집계들을 포함하여 총 9개의 집계 결과를 생성했습니다.
### 주요 포인트
- `CUBE()`를 사용하면 **모든 조합**에 대해 집계를 수행할 수 있습니다.
- `CUBE()`는 `ROLLUP()`보다 더 많은 집계 조합을 생성합니다.
- 여러 열을 인자로 제공하면 그 열들의 **모든 가능한 조합**에 대한 집계를 자동으로 수행합니다.
이처럼 `CUBE()`는 다차원 분석 시 다양한 집계 조합을 자동으로 생성해주기 때문에, 데이터 분석 시 매우 유용한 기능입니다.
'Data Analysis 데이터 분석 > SQL 통한 Database 관리' 카테고리의 다른 글
roll up, cube, grouping sets언제 뭐써야 하는지 어떻게 알까 (0) | 2024.08.19 |
---|---|
groupung sets 예시에 대해 알려줘 (0) | 2024.08.19 |
roll up 인자 안에 괄호 있는 경우, 없는경우 예시로 보여줘 (0) | 2024.08.18 |
rollup( (job),(deptno)) (0) | 2024.08.18 |
그럼 rownum은 동일한 값으로 순위 매길 경우엔? (0) | 2024.08.18 |