SQL 통한 Database 관리

group by할 열에 null이 있을 경우

JBS 12 2024. 8. 29. 20:58

`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`이 별도의 그룹을 형성한다는 점에서, 예상하지 못한 결과를 초래할 수 있으므로 데이터를 미리 확인하고 필요시 처리해야 합니다.