윈도우 사고 모델
윈도우 함수는 현재 행을 지우지 않고 주변 행을 참고한다
핵심은 GROUP BY처럼 행을 합치는 것이 아니라, 현재 행을
그대로 둔 채 비교 범위와 계산 범위를 정해 새 값을 옆에 붙이는
것입니다.
running_avg 6,600을 현재 행 옆에 붙인다.
반복 기준 행은 사라지지 않고, 각 행마다 현재 행·파티션·프레임 계산이 다시 적용된다.
현재 행은 서연이고, 행 수는 그대로 유지된다
namedeptsalary
민준
개발
7,000
서연
개발
6,200
도윤
개발
5,700
지우
영업
5,900
AVG(salary) OVER (
PARTITION BY dept
ORDER BY salary DESC
ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW
)
PARTITION BY가 같은 부서만 남긴다
개발민준7,000
개발서연6,200
개발도윤5,700
영업지우제외
현재 행의 부서가 개발이므로, 영업 행은 이 계산에서 빠집니다.
ORDER와 FRAME이 실제 평균에 넣을 행을 정한다
1민준포함
2서연현재
3도윤아직 밖
CURRENT ROW까지라서 서연보다 뒤에 선 도윤은 아직
평균에 들어가지 않습니다.
계산한 값은 현재 행 옆에 새 컬럼으로 붙는다
현재 행서연
프레임 행민준+서연
running_avg6,600
이 과정은 모든 행마다 다시 반복된다
민준의 현재 행, 서연의 현재 행, 도윤의 현재 행마다 파티션과 프레임이 다시 잡힙니다. 그래서 윈도우 함수 결과는 행마다 같을 수도, 달라질 수도 있습니다.
현재 행을 먼저 고른다
어떤 행 옆에 값을 붙일지 정하고, 원래 행은 결과에서 유지합니다.
비교할 행 묶음을 좁힌다
PARTITION BY는 같은 부서, 같은 고객 같은 비교 단위를
만듭니다.
정렬과 프레임으로 계산 폭을 정한다
ORDER BY와 ROWS/RANGE가 누적, 이동 평균,
전체값의 차이를 만듭니다.