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)하여 각 국가별 합계를 생성하여 각 파티션 행에 합계를 출력한다.
'Data Analytics' 카테고리의 다른 글
GA(Google Analytics)란? (0) | 2023.01.03 |
---|---|
Cohort 코호트 분석이란? (0) | 2022.12.16 |
윈도우 함수_ 순위함수 RANK, DENSE_RANK, ROW_NUMBER (0) | 2022.12.16 |
Funnel Anlysis 퍼널분석 /AARRR퍼널 이란? (0) | 2022.12.13 |
RFM Segmentation (RFM 분석) 이란? (0) | 2022.12.02 |