에듀테크 프로젝트 대시보드
윈도우 함수
집계처럼 여러 행을 보되 행을 합치지 않고 각 행 옆에 계산 결과를 붙입니다. 순위·누적·이동평균의 핵심.
함수() OVER (
PARTITION BY 그룹컬럼 -- 생략 시 전체가 한 그룹
ORDER BY 정렬컬럼
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW -- 프레임(선택)
)SELECT class_id, name, score,
row_number() OVER w AS 순번, -- 1,2,3,4 (동점도 임의 구분)
rank() OVER w AS 등수, -- 1,2,2,4 (동점 후 건너뜀)
dense_rank() OVER w AS 조밀등수, -- 1,2,2,3
ntile(4) OVER w AS 사분위
FROM exams
WINDOW w AS (PARTITION BY class_id ORDER BY score DESC);반복되는 OVER (...) 는 WINDOW 절로 한 번만 정의할 수 있습니다.
SELECT day, revenue,
lag(revenue) OVER (ORDER BY day) AS 전일,
revenue - lag(revenue) OVER (ORDER BY day) AS 증감,
lead(revenue) OVER (ORDER BY day) AS 익일
FROM daily_sales;SELECT day, revenue,
sum(revenue) OVER (ORDER BY day) AS 누적합,
avg(revenue) OVER (ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS 이동평균7일,
revenue::numeric / sum(revenue) OVER () * 100 AS 비중_pct
FROM daily_sales
ORDER BY day;