groupby 가 어떻게 실행되는지 예시로 알려줘
`GROUP BY`는 SQL에서 데이터를 그룹화하여 집계 함수(`SUM`, `MAX`, `MIN`, `COUNT` 등)를 사용할 때 사용됩니다. `GROUP BY`는 지정된 열을 기준으로 동일한 값을 가진 행들을 묶고, 각 그룹에 대해 집계 작업을 수행합니다.
### `GROUP BY` 동작 방식: 예시
#### 예제 테이블: `sales`
가령, 다음과 같은 `sales` 테이블이 있다고 가정해봅시다:
| id | region | sales_amount |
|-----|--------|--------------|
| 1 | East | 100 |
| 2 | West | 150 |
| 3 | East | 200 |
| 4 | West | 250 |
| 5 | East | 150 |
#### 목표
각 지역(`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 | East | 200 |
| 4 | West | 250 |
| 5 | East | 150 |
2. **`GROUP BY` 실행**:
- `region` 열을 기준으로 데이터를 그룹화합니다.
- 동일한 `region` 값을 가진 행들이 하나의 그룹으로 묶입니다.
결과:
- `East` 그룹:
| id | region | sales_amount |
|-----|--------|--------------|
| 1 | East | 100 |
| 3 | East | 200 |
| 5 | East | 150 |
- `West` 그룹:
| id | region | sales_amount |
|-----|--------|--------------|
| 2 | West | 150 |
| 4 | West | 250 |
3. **집계 함수 실행 (`SUM`)**:
- 각 그룹 내에서 `SUM(sales_amount)` 함수가 실행됩니다.
- `SUM` 함수는 그룹 내의 `sales_amount` 값을 모두 더합니다.
결과:
- `East` 그룹의 합계: `100 + 200 + 150 = 450`
- `West` 그룹의 합계: `150 + 250 = 400`
4. **최종 결과 반환**:
- 각 그룹에 대한 집계 결과가 반환됩니다.
| region | total_sales |
|--------|-------------|
| East | 450 |
| West | 400 |
### 결과 해석
이 쿼리는 `region`별로 그룹화한 후, 각 지역의 `sales_amount` 합계를 계산하여 `total_sales`라는 별칭으로 결과를 반환합니다.
- `East` 지역의 총 매출은 `450`.
- `West` 지역의 총 매출은 `400`.
이러한 방식으로 `GROUP BY`는 데이터를 그룹화하고, 각 그룹에 대해 집계 작업을 수행하여 원하는 결과를 얻을 수 있습니다.
### 주의점
- **`GROUP BY`와 함께 사용되는 열**: `SELECT` 절에 나오는 열은 반드시 `GROUP BY` 절에 있어야 하며, 그렇지 않으면 해당 열에 대해 집계 함수가 적용되어야 합니다.
- **NULL 값 처리**: `GROUP BY`는 `NULL` 값을 하나의 그룹으로 취급합니다.
- **다중 열 그룹화**: 두 개 이상의 열을 사용하여 데이터를 그룹화할 수도 있습니다.
```sql
SELECT region, category, SUM(sales_amount)
FROM sales
GROUP BY region, category;
```
- 이 경우 `region`과 `category`가 동일한 행들끼리 묶입니다.