window function

David8·2023년 6월 13일
0

DB

목록 보기
4/5

기본 개념

  1. 행과 행 간의 관계를 쉽게 정의하기 위하여 만든 함수
  2. 기본 문법
    1. over: 필수 포함, over 내부에 PARTITION BY 절과 ORDER BY 절이 들어감
    2. partition by: 전체 집합을 해당 기준에 소그룹으로 나눔
SELECT WINDOW_FUNCTION (ARGUMENTS) OVER([PARTITION BY 컬럼] [ORDER BY 컬럼] [WINDOWING 절])
FROM 테이블명;
  1. 종류

순위 함수

  1. RANK: order by를 포함한 쿼리문에서 특정 컬럼의 순위를 구하는 함수
    1. 중간 순위 비움
  2. DENSE_RANK: rank 작동법과 동일, 중간 순위 비우지 않음
    1. ex) 1,1,2,3,3,4
  3. row_number: 동일한 값이어도 고유한 순위를 부여

예제

순서 함수

  1. LAG & LEAD

    1. lag: 현재 행보다 이전행을 가져옴
    SELECT LAG([대상 컬럼], [이전 offset], [기본값]) OVER (PARTITION BY [..] ORDER BY [..])

    예제

    1. lead: 다음행 조회
    SELECT LEAD([대상 컬럼], [다음 offset], [기본값]) OVER (PARTITION BY [..] ORDER BY [..])

    예제

  2. FIRST_VALUE & LAST_VALUE

    1. FIRST_VALUE : 선택된 레코드들 중 특정한 컬럼을 기준으로 시작 값(처음 값)을 출력
    2. LAST_VALUE : 선택된 레코드들 중 특정 컬럼을 기준으로 마지막 레코드의 값(현재 레코드 또는 그룹/전체 중 마지막 값)을 출력

범위 지정

  1. 범위지정은 over() 안에서 [ RANGE / ROWS ] + BETWEEN 를 지정하여 할 수 있음
    1. 특정 물리적인 행에 대해서 범위를 지정하고 싶다면, ROWS + BETWEEN 을 사용함
    2. 논리적인 단위로 행의 범위를 지정하고 싶다면, RANGE + BETWEEN 을 사용함

ROWS : 물리적인 단위로 행 집합을 지정
RANGE : 논리적인 단위로 의해 행 집합을 지정

BETWEEN ~ AND : 윈도우의 시작과 끝 위치를 지정

UNBOUNDED PRECEDING : 윈도우 시작 위치가 첫 번째 로우임을 의미
UNBOUNDED FOLLOWING : 윈도우 마지막 위치가 마지막 로우임을 의미

[ROW수] PRECEDING : 윈도우 시작 위치가 ROW수만큼 이전이 시작 로우임을 의미
[ROW수] FOLLOWING : 윈도우 마지막 위치가 ROW수만큼 다음이 마지막 로우임을 의미

CURRENT ROW : 현재 로우까지를 의미

interval: 날짜 및 시간 값에 대한 연산을 수헹 할 때 사용되는 문법, interval을 사용하면 일,시간,분,초 등의 값을 날짜 및 값에 더하거나 빼는 등의 연산을 쉽게 수행 가능


비율 함수

  1. PERCENT_RANK()
    1. 동점을 고려하지 않고 임의의 행의 백분율 순위를 계산
    2. ( rank - 1 ) / ( total_rows - 1 )
  2. cume_dist()
    1. 동점을 고려하여 결과 집합 내 값의 누적 분포 계산

0개의 댓글