코딩테스트/SQL

SQL > WINDOW FUNCTION / ROWS & RANGE

Porits789 2024. 6. 17. 10:52

윈도우 함수를 사용시 함수에 포함시킬 행의 범위를 지정한다. ROWS와 RANGE가 존재한다.

다음 블로그를 참고하여 정리했습니다. https://camel-context.tistory.com/14

 

[SQL][SQLD][SQLP] 윈도우 함수

윈도우 함수 SELECT WINDOW_FUNCTION([컬럼]) OVER ( [PARTITION BY 컬럼] [ORDER BY 컬럼] [WINDOWING 절] ) FROM 테이블명 ; 윈도우 함수는 로우 간의 관계를 구할 수 있도록 만들어 놓은 함수이다. 로우 간의 순위, 집

camel-context.tistory.com

Rows  & Range

ROWS : 현재 row 위치에서 물리적인 범위를 지정한다.

RANGE: 현재 row 값을 기준으로 논리적인 범위를 지정.

 

[UNBOUNDED PRECEDING]

ROW:  현재 행과 현재 행 위에 있는 모든 행들을 함수에 사용한다.

RANGE: 현재 행의 값을 기준으로 이하의 값을 함수에 사용한다.

 

[숫자 PRECEDING]

ROW: 현재 행과 바로 위의 N개의 행의 값을 함수에 사용한다. -> 숫자를 지정한 만큼 앞의 값을 사용

=> SUM(A) OVER (ORDER BY B ROWS 1 PRECEDING) 이라면 A의 값은 B행으로 나열하였을때
앞의 첫 행의 값을 더해서 값을 산출한다.

 

[BETWEEN과 함께]

범위를 지정하고 싶다면 BETWEEN을 사용해서 작성할 수 있다.

예를 들어서 현재로부터 6일 이전의 전의 값까지 합하고 싶다면 이런 쿼리문을 작성하면 된다.

SUM(amount) OVER (ORDER BY visited_on ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)