기본 패턴
text
SELECT
user_id,
created_at,
ROW_NUMBER() OVER (
PARTITION BY user_id
ORDER BY created_at DESC
) AS rn
FROM posts;설명
- 윈도 함수는
GROUP BY처럼 행을 하나로 줄이지 않고, 각 행을 유지한 채 계산 결과를 덧붙입니다. OVER (...)안에는 어떤 범위를 기준으로 계산할지 적습니다.PARTITION BY는 그룹을 나누고,ORDER BY는 그 안에서 순서 기준을 정합니다.ROW_NUMBER,RANK,SUM,AVG등을 윈도 함수 형태로 쓰면 "사용자별 최신 글", "부서별 급여 순위", "날짜별 누적 합계" 같은 분석 쿼리를 표현하기 좋습니다.- 집계와 비슷해 보이지만, 결과 행을 유지한다는 점이 핵심 차이입니다.
짧은 예제
text
SELECT
user_id,
amount,
SUM(amount) OVER (
PARTITION BY user_id
ORDER BY created_at
) AS running_total
FROM payments;빠른 정리
| 요소 | 의미 |
|---|---|
| 윈도 함수 | 각 행을 유지한 채 계산 |
OVER (...) | 계산 범위 지정 |
PARTITION BY | 그룹 나누기 |
ORDER BY | 그룹 안 순서 지정 |
주의할 점
윈도 함수는 집계와 달리 원본 행 수를 줄이지 않습니다. "사용자당 한 줄만 필요하다"면 윈도 함수 결과를 바깥 쿼리에서 한 번 더 걸러야 할 때가 많습니다.
참고 링크
2 sources