SQL 통한 Database 관리

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

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

'SQL 통한 Database 관리' 카테고리의 다른 글

update set  (0) 2024.08.29
GROUP BY 예시  (0) 2024.08.29
group by할 열에 null이 있을 경우  (0) 2024.08.29
group by의 기준이 되는 칼럼이 아닌 다른 칼럼에서 null 있으면?  (1) 2024.08.29
having count(*)=2  (0) 2024.08.29