Analytic SQL, Analytic Function이라고도 한다.
group by만 쓰게되면 집합의 레벨도 바뀌고, 쓸 수 있는 값의 범위도 좁아지고, 여러번 join해야하는 여러가지 불편한점이 많았다.
하지만 window function을 쓰게되면 원본 데이터의 집합 레벨을 그대로 유지하면서 여러가지 함수 적용이 가능하다.
내부적으로 window(창모양)의 프레임을 조절해가며 row단위의 집합 연산을 수행한다.
집계(aggregate)계열 analytic 함수는 order by절이 있을 경우 window절은 기본적으로 range unbounded preceding and current row이다.
만약 order by절이 없다면 window는 해당 partition의 모든 row를 대상으로 한다.
만약 partition절도 없다면 window는 전체 데이터의 row를 대상으로 한다.
적용할함수(적용컬럼) OVER(PARTITION BY 그룹열 ORDER BY 순서열)
✔ 전체국가 합계와 국가별 profit의 합 구하기
SELECT
year, country, product, profit,
SUM(profit) OVER() AS total_profit,
SUM(profit) OVER(PARTITION BY country) AS country_profit
FROM sales
ORDER BY country, year, product, profit;