[SQLD] 윈도우 함수

hwwwa·2022년 6월 1일
0

🍊 SQLD

목록 보기
12/16

윈도우 함수

  • 윈도우 함수는 결과에 대한 함수 처리이므로 사용 전 후의 결과 건수는 동일
  • 현재 레코드 기준 이전 또는 이후 위치의 레코드 접근 가능 → ROWS, RANGE
  • ROWS (현재 행 기준 몇개의 행을 포함하는지. 물리적)
    RANGE (현재 행을 기준으로 어떤 값의 범위를 포함하는지. 논리적)
    - RANGE BETWEEN start_point AND end_point
    - start point는 end_point와 같거나 작은 값이 들어감
    - Default: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    - UNBOUNDED: 해당 파티션의 끝까지
    - PRECEDING: 현재 행에서 앞쪽의 행
    - 3 PRECEDING: 현재행부터 3앞
    - UNBOUNDED PRECEDING
    - 시작위치가 첫번째. start_point에만 사용 가능. end point에서 사용 불가
    - FOLLOWING : 현재 행에서 뒷쪽의 행. BETWEEN~AND~ 사용 필수
    - BETWEEN 1000 PRECEDING AND 1000 FLLOWING: -1000 ~ +1000 사이
    - UNBOUNDED FOLLOWING
    - 파티션의 끝까지. end_point에만 사용 가능
    - CURRENT ROW
    - start_point, end_point 둘 다 가능
    - 윈도우는 CURRENT ROW에서 start하거나 end
  • RANK(): 동일 값에 동일 순위. 중간순위는 비움. 1, 1, 3, 4, 4, …
  • DENSE_RANK(): 동일 값에 동일 순위. 중간순위 비우지 않음. 1, 1, 2, 3, 3, …
  • ROW_NUMBER(): 동일 값에도 유일한 순위 부여. 1, 2, 3, 4, 5, …
  • Partition by
    • Partition과 GROUP BY 구문은 의미적으로 유사
    • Partition 구문이 없으면 전체 집합을 하나의 Partition으로 정의한 것과 동일
    • 윈도우 함수 적용 범위는 Partition을 넘을 수 없음
  • Order by
  • LAG: 파티션별 윈도우에서 이전 몇번째 행의 값을 가져옴
    LEAD: 파티션별 윈도우에서 이후 몇번째 행의 값을 가져옴
    (SQL Server는 미지원)
  • ntile: 파티션별 전체 건수를 ARGUMENT 값으로 N 등분한 결과를 구함
    • ANSI/ISO SQL 표준에는 없지만 Oracle, SQL Server 에서 지원

0개의 댓글