SQL

[SQL] GROUP BY vs PARTITION BY

beie 2024. 12. 16. 17:36

GROUP BY와 PARTITION은 그 용도와 방식에 차이가 있음

1. GROUP BY

GROUP BY는 데이터를 그룹화해서 집계함으로써, 각 그룹에 대해 하나의 결과를 반환하는 데 사용됩니다. 예를 들어, 특정 컬럼의 값을 기준으로 데이터를 나누고, 그 그룹에 대해 집계 함수(SUM(), AVG(), COUNT() 등)를 적용할 때 사용합니다.

예시:

sql
 
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)**와 함께 사용되며, 데이터를 그룹화하지 않고 각 행에 대해 독립적인 계산을 수행합니다. 즉, 데이터를 나누어서 그룹 단위로 결과를 반환하는 것이 아니라, 각 행이 다른 행들과 독립적으로 처리되면서도 그들끼리 어떤 기준에 따라 나누어져 계산됩니다.

예시:

sql
 
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에 나타나지 않음! (+일회성)