윈도우 사고 모델

윈도우 함수는 현재 행을 지우지 않고 주변 행을 참고한다

핵심은 GROUP BY처럼 행을 합치는 것이 아니라, 현재 행을 그대로 둔 채 비교 범위와 계산 범위를 정해 새 값을 옆에 붙이는 것입니다.

현재 행 서연 / 개발 / 6,200
PARTITION 같은 부서인 개발 행만 비교 묶음으로 남긴다.
FRAME 민준과 서연처럼 실제 평균에 넣을 행을 좁힌다.
새 컬럼 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
주의

이 과정은 모든 행마다 다시 반복된다

민준의 현재 행, 서연의 현재 행, 도윤의 현재 행마다 파티션과 프레임이 다시 잡힙니다. 그래서 윈도우 함수 결과는 행마다 같을 수도, 달라질 수도 있습니다.

1단계

현재 행을 먼저 고른다

어떤 행 옆에 값을 붙일지 정하고, 원래 행은 결과에서 유지합니다.

2단계

비교할 행 묶음을 좁힌다

PARTITION BY는 같은 부서, 같은 고객 같은 비교 단위를 만듭니다.

3단계

정렬과 프레임으로 계산 폭을 정한다

ORDER BYROWS/RANGE가 누적, 이동 평균, 전체값의 차이를 만듭니다.