`GROUP BY` 절에서 사용하는 열에 `NULL` 값이 있는 경우, `NULL` 값은 다른 값들과 마찬가지로 하나의 그룹으로 처리됩니다. 즉, `NULL` 값이 있는 모든 행들이 하나의 그룹으로 묶입니다.
### 예제
다음과 같은 `sales` 테이블이 있다고 가정해봅시다:
| id | region | sales_amount |
|-----|--------|--------------|
| 1 | East | 100 |
| 2 | West | 150 |
| 3 | NULL | 200 |
| 4 | East | 250 |
| 5 | NULL | 300 |
이제 `region` 열을 기준으로 `sales_amount`의 합계를 구하는 쿼리를 실행해보겠습니다.
### 쿼리
```sql
SELECT region, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY region;
```
### `GROUP BY`의 동작 방식
1. **데이터 로드**:
- SQL 엔진이 `sales` 테이블의 데이터를 로드합니다.
| id | region | sales_amount |
|-----|--------|--------------|
| 1 | East | 100 |
| 2 | West | 150 |
| 3 | NULL | 200 |
| 4 | East | 250 |
| 5 | NULL | 300 |
2. **`GROUP BY` 실행**:
- `region` 열을 기준으로 데이터를 그룹화합니다.
- 동일한 `region` 값을 가진 행들이 하나의 그룹으로 묶입니다.
- `NULL` 값도 하나의 그룹으로 처리됩니다.
결과:
- `East` 그룹:
| id | region | sales_amount |
|-----|--------|--------------|
| 1 | East | 100 |
| 4 | East | 250 |
- `West` 그룹:
| id | region | sales_amount |
|-----|--------|--------------|
| 2 | West | 150 |
- `NULL` 그룹:
| id | region | sales_amount |
|-----|--------|--------------|
| 3 | NULL | 200 |
| 5 | NULL | 300 |
3. **집계 함수 실행 (`SUM`)**:
- 각 그룹 내에서 `SUM(sales_amount)` 함수가 실행됩니다.
- `SUM` 함수는 그룹 내의 `sales_amount` 값을 모두 더합니다.
결과:
- `East` 그룹의 합계: `100 + 250 = 350`
- `West` 그룹의 합계: `150`
- `NULL` 그룹의 합계: `200 + 300 = 500`
4. **최종 결과 반환**:
- 각 그룹에 대한 집계 결과가 반환됩니다.
| region | total_sales |
|--------|-------------|
| East | 350 |
| West | 150 |
| NULL | 500 |
### 결과 해석
- `East` 지역의 총 매출은 `350`.
- `West` 지역의 총 매출은 `150`.
- `region` 값이 `NULL`인 그룹의 총 매출은 `500`.
### 결론
- **`NULL` 값의 그룹화**: `GROUP BY` 절에서 `NULL` 값은 고유한 값으로 처리되며, `NULL` 값이 있는 모든 행은 하나의 그룹으로 묶입니다.
- **NULL 값 그룹의 유용성**: `NULL` 그룹은 데이터에서 특정 열에 값이 지정되지 않은 항목들이 어떤 집계 결과를 보이는지 분석할 때 유용할 수 있습니다.
`GROUP BY` 절에서 `NULL` 값이 있는 경우, 이를 염두에 두고 집계 결과를 해석하는 것이 중요합니다. `NULL`이 별도의 그룹을 형성한다는 점에서, 예상하지 못한 결과를 초래할 수 있으므로 데이터를 미리 확인하고 필요시 처리해야 합니다.
'Data Analysis 데이터 분석 > SQL 통한 Database 관리' 카테고리의 다른 글
GROUP BY 예시 (0) | 2024.08.29 |
---|---|
groupby 가 어떻게 실행되는지 예시로 알려줘 (0) | 2024.08.29 |
group by의 기준이 되는 칼럼이 아닌 다른 칼럼에서 null 있으면? (1) | 2024.08.29 |
having count(*)=2 (0) | 2024.08.29 |
select from group by having order by 순서 (0) | 2024.08.29 |