[SQL] Window Function

hyunsooSong·2022년 5월 24일

SQL

목록 보기
9/14
post-thumbnail

🌌 Window Function

1. Frame 지정

✅ {범위} BETWEEN {시작} AND {종료}

  • n PRECEDING : n행 앞
  • n FOLLOWING : n행 뒤
  • UNBOUNDED PRECEDING : 현재 행 기준으로 이전 행 전부
  • UNBOUNDED FOLLOWING : 현재 행 기준으로 이후 행 전부
  • CURRENT ROW : 현재 행

SELECT 고객번호, ROW_NUMBER() OVER (PARTITION BY 고객번호
     ORDER BY 매출액 RANGE BETWEEN 1000 PRECEDING AND 1000
     FOLLOWING) AS_ 순위
FROM 월별매출
GROUP BY 고객번호;

=> 고객번호 별로 -1000 ~ +1000 사이에 존재하는 매출액으로 순위를 매긴다.


2. 범위 (RANGE, ROWS)

✅ RANGE는 값에 대한 결과를 모두 결합한다. ROWS는 값을 각각 개별적으로 처리한다.

[월별매출]

월(PK)고객번호(PK)고객명매출액
202201001송부장1
202201002박부장1
202201003용부장1
202201004김부장1
202202005최팀장1
202202006곽인턴1

SELECT 월, 고객번호,
      SUM(매출액) OVER (PARTITION BY 월 ORDER BY 월
      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
      AS RANGE,
     SUM (매출액) OVER(PARTITION BY 월 ORDER BY 월
      ROWS UNBOUNDED PRECEDING AND CURRENT ROW) AS ROWS
FROM 월별매출;

[SQL 결과]

월(PK)고객번호(PK)RANGEROWS
20220100141
20220100242
20220100343
20220100444
20220200521
20220200622

+ 👀 틈새 지식

💡 Window Function은 Group By와 Order By절에서 사용해도 오류가 발생하지 않는다.

profile
🥕 개발 공부 중 🥕

0개의 댓글