[SQLD/P] 윈도우 함수(window function)의 특징

Hyo Kyun Lee·2022년 12월 9일
0

SQLD/P

목록 보기
66/82

1. 개요

윈도우 함수는 행과 행간의 비교 및 연산을 할 수 있는 함수이며, 보통은 정렬목적으로 사용한다.

ROW_NUMBER, RANK, DENSE_RANK 등 보통 행의 순위와 해당 순위를 통해 출력할 행의 갯수를 제한할때 많이 활용한다.

2. 특징

이 윈도우 함수를 사용할때 유의해야할 특징이 몇가지 있다.

SELECT WINDOW_FUNCTION(COLUMN) OVER (PARTITON BY A, ORDER BY B)
  • WINDOW_FUNCTION의 인자에 특정 COLUMN이 들어간다면, 보통 행과 행간의 연산(합계, 평균 등)을 위한 함수이다.

  • WINDOW_FUNCTION은 그 자체로 정렬 결과를 도출할 수 있고, 내부적으로 특정 기준에 따라 정렬한 후 윈도우 함수의 연산 결과만을 도출할 수도 있다.

※ 정렬결과 자체를 도출하는 경우

SELECT COLUMN_A, COLUMN_B
FROM(
	SELECT COLUMN_A, COLUMN_B, COLUMN_C
    	  ,ROW_NUMBER() OVER(PARTITION BY COLUMN_A, ORDER BY COLUMN_B)
    FROM TABLE
)
WHERE RNK < 50;

위 쿼리는 ROW_NUMBER() 윈도우 함수로 인해, COLUMN_A를 그룹기준으로 하여 COLUMN_B를 오름차순으로 정렬한 결과에 대해 순위를 부여한 결과를 출력한다.

윈도우 함수로 인해 자체적으로 정렬이 된 상태를 그대로 출력한다.

※ 연산 결과만을 도출하는 경우

SELECT COLUMN_A, AVG(COLUMN_B)
	  ,COUNT(*) OVER(ORDER BY AVG(COLUMN_B) BETWEEN 100 PRECEDING AND 100 FOLLOWING)
FROM TABLE
GROUP BY COLUMN_A

위 쿼리는 COUNT(*) OVER 윈도우 함수를 사용하고, OVER에서 정한 기준에 따라 정렬한 결과에 대해 윈도우 함수의 연산 결과만을 도출한다.

※ 연산 순서

  • 먼저 GROUP BY에 의해 그룹화하고, 이에 따라 AVG(COLUMN_B)가 도출된다.
  • AVG(COLUMN_B)의 결과에 대해 오름차순으로 정렬하고, 이 결과에 대해 이전 100~이후 100개의 행의 count(*)(= 행의 개수)를 도출한다(도출한 결과를 그대로 행에 기재).
  • 참고로 OVER는 해당 연산 및 정렬에 대한 기준이고, 모든 윈도우 함수에 필수적으로 사용한다.

3. 이외 유의해야하는 여러 함수들

  • LAG(정렬후 이전행)
  • LEAD(정렬후 이후행)

4. 참고자료

윈도우 함수의 개념(OVER의 의미) - https://geniusjo.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-%ED%95%A8%EC%88%98WINDOW-FUNCTION
윈도우 함수의 개념 - https://for-my-wealthy-life.tistory.com/48
LAG/LEAD - https://aljjabaegi.tistory.com/576

0개의 댓글