Home [MySQL] WINDOWING절
Post
Cancel

[MySQL] WINDOWING절

Window Function

1
2
3
4
5
6
7
8
SELECT
  WINDOW_FUNCTION(ARGUMENTS)
  OVER(
    [PARTITION BY 컬럼]
    [ORDER BY ]
    [WINDOWING ]
  )
 FROM 테이블명;

image

WINDOWING절

  • WINDOWING절은 함수의 대상이 되는 범위를 지정해주는 역할을 한다.
  • 범위를 지정하는 데에는 ROWSRANGE 두 가지 방식이 있다.

ROWS vs RANGE

  • ROWS : 행의 수를 선택할 때 사용
  • RANGE : 값의 범위를 선택할 때 사용

image

  • ROWS UNBOUNDED PRECEDING, ROWS UNBOUNDED FOLLOWING 과 같이 시작 범위나 종료 범위만 지정할 수 있다.
  • ROWS BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING, RANGE BETWEEN 300 PRECEDING AND 300 FOLLOWING 과 같이 시작 범위와 종료 범위를 함께 지정할 수 있다.
  • BETWEEN을 쓰지 않으면 자동으로 CURRENT ROW를 기준으로 계산한다.

예시

1
2
3
4
-- 맨 위 행에서부터 현재 행까지만 계산
SELECT
  JOB,
  SUM(SALARY) OVER(PARTITION JOB ORDER BY SALARY DESC ROWS UNBOUNDED PRECEDING) 
1
2
3
4
-- 현재 행부터 맨 마지막 행까지 계산
SELECT
  JOB,
  SUM(SALARY) OVER(PARTITION JOB ORDER BY SALARY DESC ROWS UNBOUNDED FOLLOWING) 
1
2
3
4
-- 현재 행부터 다음 행까지 계산 (ROWS 1 FOLLOWING과 같다)
SELECT
  JOB,
  SUM(SALARY) OVER(PARTITION JOB ORDER BY SALARY DESC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) 
  • RANGE는 행이 가지고 있는 값을 이용해 지정을 해준다.
1
2
3
4
-- 현재 행의 SALARY를 기준으로 -100 ~ +300 범위 내에 있는 행의 합을 계산
SELECT
  JOB,
  SUM(SALARY) OVER(PARTITION JOB ORDER BY SALARY DESC RANGE BETWEEN 100 PRECEDING AND 300 FOLLOWING) 
This post is licensed under CC BY 4.0 by the author.