[SQL] Window Function

hyunsooSong·2022년 5월 24일
0

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 BYORDER BY
      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
      AS RANGE,
     SUM (매출액) OVER(PARTITION BYORDER 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개의 댓글