Window Function

1. 왜 Window인가?

  • Window function의 목적 : 행과 행 간의 관계를 쉽게 표현(정의/비교/연산)하기 위함
  • 나오게된 배경 : 기존의 RDBMS는 컬럼 간(column-column) 관계를 다루었음. 행 간의 관계를 다루기 위해서는 PL/SQL 또는 인라인 뷰(Inline View)를 활용해야 했음. 이 과정의 불편함을 해소하기 위해 window function이 출시됨
  •  ‘Window’ 명칭 : 행과 행 간의 관계를 다루는 과정에서 필연적으로 관계의 범위를 한정해야 함. 이것이 행을 둘러싼 프레임(frame) 또는 창(window) 같다고 하여 ‘window’란 명칭이 부여됨 (아래 그림1 참고)
  • OVER 절 : 범위를 한정시키는 문법 규칙은 후술되는 OVER 절에 귀속됨. 결국 OVER절을 얼마나 잘 이해하고 사용하느냐가 Window function의 관건임 (WINDOW_FUNCTION은 기본)

    (참고 그림1)
    windows_function.PNG

2. 문법

SELECT WINDOW_FUNCTION (ARGUMENTS) OVER ( [PARTITION BY 칼럼] [ORDER BY 절] [WINDOWING 절] ) FROM 테이블 명;

*OVER 절은 필수. 구성 요소는 다음과 같음 :
– PARTITION BY 절 : 전체 집합을 기준 (컬럼) 에 의해 소그룹으로 구분
– ORDER BY 절 : 어떤 항목 (컬럼) 에 대해 순위를 지정할 지 기술
– WINDOWING 절 :  함수의 대상이 되는 행 기준의 범위를 강력하게 지정

WINDOWING 절
ROWS 는 물리적인 결과 행의 수, RANGE 는 논리적인 값에 의한 범위
2 中 1 택

 BETWEEN 사용 타입
 ROWS | RANGE BETWEEN
 UNBOUNDED PRECEDING | CURRENT ROW | VALUE_EXPR PRECEDING/FOLLOWING
 AND
 UNBOUNDED FOLLOWING | CURRENT ROW | VALUE_EXPR PRECEDING/FOLLOWING

 BETWEEN 미사용 타입
 ROW | RANGE
 UNBOUNDED PRECEDING | CURRENT ROW | VALUE_EXPR PRECEDING

3. WINDOW_FUNCTION 종류

  • 순위함수 : RANK, DENSE_RANK, ROW_NUMBER
    *동일 값에 대해서는 동일 순위를 매김
  • 집계함수 : SUM, MAX, MIN, AVG, COUNT
  • 순서함수 : FIRST_VALUE, LAST_VALUE, LAG, LEAD
  • 비율함수 : CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT
  • 선형 분석을 포함한 통계 분석 관련 함수

 

참고
https://en.wikipedia.org/wiki/SQL_window_function
http://www.dbguide.net/db.db?cmd=view&boardUid=148205&boardConfigUid=9&categoryUid=216&boardIdx=135&boardStep=1
http://wiki.gurubee.net/pages/viewpage.action?pageId=27427796

광고

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: