Data Analysis 데이터 분석/SQL 통한 Database 관리

groupby 가 어떻게 실행되는지 예시로 알려줘

Queen Julia 2024. 8. 29. 20:58

`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`가 동일한 행들끼리 묶입니다.