GROUP BY는 여러 행을 압축하여 보여준다면, 윈도우 함수는 각 행을 유지한 채, 새로운 결과를 새로운 열에 추가
SELECT column_name(s), WINDOW_FUNCTION_NAME(argument(s)) OVER ( [PARTITION BY column_name(s)] [ORDER BY column_name(s)] [ROWS or RANGE BETWEEN start AND end] ) AS new_column_nameFROM table_name;
PARTITION BY: 창문을 통해 내다볼 ‘그룹’을 나눈다. GROUP BY와 유사하지만, 행을 합치지 않는다. 예를 들어 PARTITION BY department는 부서별로 별개의 창문을 만드는 것과 같다.
ORDER BY: 파티션(그룹) 내에서 어떤 순서로 행을 정렬할지 결정. 순위나 누적 값을 계산할 때 필수적.
ROWS / RANGE (프레임 절): 파티션 내에서 현재 행을 기준으로 계산에 포함할 구체적인 행의 범위를 지정. 예를 들어 ‘현재 행과 이전 2개 행’ 또는 ‘현재 행부터 파티션의 마지막 행까지’와 같이 매우 세밀한 범위 설정이 가능.