집계 함수시 range ~ and ~ 옵션
현재 매출에 관계된 데이터들의 집계 함수를 가져올때, 누적매출액을 포함해서 데이터를 가져오고 싶은 경우가 있다.
예를 들어 위와 같은 데이터가 존재한다고 가정하자.
지점별로 판매월순으로 누적매출액을 구한다고 할때 사용하는 방법은 SUM 집계함수를 이용해 지점 컬럼을 파티션으로 묶고 판매월순으로 ORDER BY 를 진행하는것이다.
SUM(매출) OVER (PARTITION BY 지점 ORDER BY 판매월 @옵션)
여기서 옵션에 들어가는 부분이 RANGE BETWEEN ~ AND ~ 이다.
옵션에는 RANGE BETWEEN을 이용한 방법과 ROWS BETWWEN ~ AND를 이용한 방법이 있고 그 안에서도 UNBOUNDED PRECEDING AND CURRENT ROW와 (숫자) PRECEDING AND (숫자) FOLLOWING을 이용한 방법이 있다.
예를 들어보면
1) RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW는 PARTITION으로 묶여 있는값들이 같은 값일 경우 최종건을 출력한다.
보는 바와 같이 지점으로 PARTITION을 묶었고 집계함수의 대상이 되는 컬럼 매출 값이 같은 경우 최종으로 출력되는 1건을 출력하고 있다.
2) ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW는 반면에 값을 같일지라도 행을 기준으로 출력한다.
매출값이 521로 같은지라도 위와 반대로 각행을 기준으로 누적매출값을 출력해주는 모습이다.
3) ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING 은 숫자를 기준으로 값을 표시한다. 이와 같은 문법의 경우 전의 1번째 ROW, 뒤의 1번째 ROW를 포함한 값을 출력한다는 의미이다.
PARTITION을 기준으로 전의 1ROW, 후의 1ROW값을 포함해 출력하는 모습을 볼수 있다.