Data Analytics

[SQL] Window Function 윈도우 함수란?

cheersHena 2022. 12. 14. 22:23
반응형

SQL문의 윈도우 함수란 Group By 와 비슷하게 데이터를 그룹화 하여 집계한다.

하지만 Group By 는 집계된 결과만 보여주는 반면, 윈도우 함수는 기존 데이터에 집계된 값을 추가하여 나타낸다.

 

함수(컬럼) OVER(PARTITION BY 컬럼 ODER BY 컬럼)

함수:

MIN(), MAX(), SUM(), COUNT() 등과 같은 기존 함수 또는

LAG(),LEAD(),RANK(), ROW_NUMBER() 등의 윈도우 함수를 쓸 수 있다.

기존 함수)                                                                  

 윈도우 함수) 

OVER:

윈도우 함수에서 꼭 들어가야 하며, OVER내부에 PARTITION BY 절과 ORDER BY 절이 들어감.

 

PARTITION BY (생략가능)

전체 집합을 기준 컬럼에 따라 나눌지 결정

 

ORDER BY (생략가능)

정렬 기준 

 

* GROUP BY 와의 차이.

GROUP BY절은 지정된 컬럼으로 데이터를 자르고, 집계함수를 이용해 집약시키기 때문에 행의 수가 줄어든다.

하지만 윈도우 함수는 PARTITION BY 에 지정된 컬럼으로 데이터를 자르므로 기존 데이터에 집계된 값을 추가한다.

즉, 행의 수가 그대로 유지된다. 

GROUP BY 절과 윈도우 함수의 가장 큰 차이는 '집약'과정이 존재하는가? 이다. 

 

 

 

쿼리 예시를 들어 이해해보자. 다음과 같은 데이터가 있을때, 

salse 테이블을 사용하여 전체 total_profit과, country 별 합계인 country_profit을 구한다고 해보자. 

GROUP BY절을 써서 구해보면, 

다음과 같이 country별로 데이터를 집약하여 집계함수는 SUM을 사용한 합계를 나타낸다. 

GROUP BY를 쓴 쿼리에서는 이미 그룹화했기 때문에 전체 total_profit을 한번에 조회할수 없다. 

한편, 윈도우 함수를 써서 구해보면 

다음과 같이 기존의 행을 단일 출력행으로 집약하지 않고 대신, 각 행에 대한 결과를 생성하여 갖다붙힌다.

때문에 집계함수를 쓰면서도 각기 다른 기준으로 그룹화하여 그 값을 구할 수 있다. 

 

SUM(profit) OVER() AS total_profit

 --> OVER절이 비어있으므로 전체 합계를 생성하여 각 행에 출력한다.

SUM(profit) OVER(PARITTION BY country) AS country_profit

-->country별로 분할(partiton by)하여 각 국가별 합계를 생성하여 각 파티션 행에 합계를 출력한다. 

 

 

 

 

반응형