[SQL] GROUP BY vs PARTITION BY
GROUP BY와 PARTITION은 그 용도와 방식에 차이가 있음
1. GROUP BY
GROUP BY는 데이터를 그룹화해서 집계함으로써, 각 그룹에 대해 하나의 결과를 반환하는 데 사용됩니다. 예를 들어, 특정 컬럼의 값을 기준으로 데이터를 나누고, 그 그룹에 대해 집계 함수(SUM(), AVG(), COUNT() 등)를 적용할 때 사용합니다.
예시:
SELECT ProductID, SUM(OrderQty) AS TotalQty
FROM Sales.SalesOrderDetail
GROUP BY ProductID;
이 쿼리는 ProductID를 기준으로 데이터를 그룹화한 후, 각 제품별로 주문 수량(OrderQty)의 합계를 계산합니다. 이때 GROUP BY가 ProductID를 기준으로 데이터를 그룹화하고, 그 그룹 내에서 합계를 구합니다.
주요 특징:
- GROUP BY는 그룹 단위로 데이터를 집계합니다.
- 집계 함수가 결과에 영향을 미칩니다.
- 각 그룹의 하나의 결과를 반환합니다.
2. PARTITION BY
PARTITION BY는 **윈도우 함수(window function)**와 함께 사용되며, 데이터를 그룹화하지 않고 각 행에 대해 독립적인 계산을 수행합니다. 즉, 데이터를 나누어서 그룹 단위로 결과를 반환하는 것이 아니라, 각 행이 다른 행들과 독립적으로 처리되면서도 그들끼리 어떤 기준에 따라 나누어져 계산됩니다.
예시:
SELECT ProductID, OrderQty, AVG(OrderQty) OVER (PARTITION BY ProductID) AS AvgOrderQty
FROM Sales.SalesOrderDetail;
이 쿼리는 ProductID별로 각 주문에 대해 주문 수량(OrderQty)의 평균값을 계산합니다. PARTITION BY는 데이터를 그룹화하지 않고, ProductID별로 데이터를 나누어서 각 행에 대해 평균을 구해줍니다. 하지만 이 쿼리에서는 각 행에 대해 평균을 표시하며, 결과는 각 행에 대한 평균이 계산된 값으로 보여집니다.
주요 특징:
- PARTITION BY는 윈도우 함수와 함께 사용되어 각 행에 대해 계산
- 그룹을 나누어 계산하지만, 각 행은 독립적으로 결과를 받음
- 집계된 값을 각 행에 표시하고자 할 때 유용
GROUP BY와 PARTITION BY 차이점 요약:
특징GROUP BYPARTITION BY
목적 | 데이터를 그룹화하여 집계 값 계산 | 각 행에 대해 집계 함수 적용 (그룹화하지 않음) |
결과 | 각 그룹에 대해 하나의 결과 반환 | 각 행에 대해 계산된 값을 반환 |
사용 방식 | GROUP BY 뒤에 집계 함수 (SUM, AVG) 사용 | OVER(PARTITION BY ...)와 윈도우 함수 사용 |
예시 | 각 제품의 총 판매량 계산 | 각 제품별 평균 판매량을 각 행에 표시 |
결론:
- GROUP BY는 그룹화된 결과를 얻고자 할 때 사용
- PARTITION BY는 각 행에 대해 독립적인 계산을 하고 싶을 때 사용하며, 주로 윈도우 함수와 함께 사용
쉽게 말하자면?
GROUP BY는 output에 나타남! (+ group by 이후 실행되는 모든 쿼리에 적용됨)
PARTITION BY는 계산만 되고 output에 나타나지 않음! (+일회성)