자격증/SQLD

[SQLD/자격증] 윈도우 함수의 프레임절(Frame Clause) 완벽 이해하기

2주녘 2025. 5. 25. 14:31
반응형

SQL 윈도우 함수의 프레임절(Frame Clause) 완벽 이해하기 📈

안녕하세요, 오늘은 SQL의 강력한 기능 중 하나인 윈도우 함수(Window Functions)에서 자주 사용되는 프레임절(Frame Clause)에 대해 자세히 알아보겠습니다.

📌 프레임절(Frame Clause)이란?

프레임절은 윈도우 함수를 사용할 때 분석할 데이터의 범위를 지정하는 역할을 합니다. 윈도우 함수는 OVER 절을 이용해 특정 범위를 정의하는데, 이때 프레임절로 범위를 구체적으로 설정합니다.

기본 형태는 다음과 같습니다

윈도우함수() OVER (
    PARTITION BY 컬럼명
    ORDER BY 컬럼명
    [ROWS 또는 RANGE 프레임시작 AND 프레임종료]
);

🔍 ROWS와 RANGE의 차이점

1️⃣ ROWS

ROWS는 행의 물리적 위치를 기준으로 프레임을 정의합니다.

  • ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING: 현재 행을 기준으로 이전 행과 다음 행을 포함
  • ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: 첫 행부터 현재 행까지 포함

예시:

SELECT emp_name, salary,
       AVG(salary) OVER (
           ORDER BY salary
           ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
       ) AS avg_salary
FROM employee;
  • 각 직원의 급여를 기준으로 앞뒤 한 명씩(총 3명)의 급여 평균을 계산합니다.

2️⃣ RANGE

RANGE는 논리적인 값을 기준으로 프레임을 정의합니다. ORDER BY로 정렬된 값에 따라 프레임 범위가 결정됩니다.

  • RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW: ORDER BY의 값이 시작부터 현재 행까지 같은 모든 행을 포함합니다.

예시:

SELECT salary,
       SUM(bonus) OVER (
           ORDER BY salary
           RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
       ) AS cumulative_bonus
FROM employee;
  • 급여를 기준으로 누적된 보너스를 합산하여 나타냅니다. 급여가 동일한 모든 직원은 같은 프레임에 포함됩니다.

📝 프레임절 사용 시 주의사항

  • ROWS를 사용할 때는 행 위치가 명확히 구분되지만, RANGE를 사용할 때는 동일 값이 여러 개일 경우 같은 프레임으로 묶입니다.
  • 성능적인 측면에서 ROWS가 RANGE보다 일반적으로 더 빠르게 처리됩니다.

🚩 프레임절 자주 쓰는 표현

표현식 의미

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 처음 행부터 현재 행까지 포함
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING 현재 행부터 마지막 행까지 포함
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING 현재 행의 이전 행과 다음 행 포함
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 논리적 값 기준 처음부터 현재 값까지 포함

💡 외우기 쉬운 꿀팁!

  • ROWS는 “Row by Row(행 단위로)“를 생각하면 물리적 행 위치로 기억하기 쉬워요!
  • RANGE는 “Logical RANGE(논리적 범위)“로 논리적 값을 기준으로 기억하세요.
  • “PRECEDING(이전), CURRENT(현재), FOLLOWING(이후)” 단어 뜻 그대로 외우면 이해하기 편합니다.

🎯 요약 및 결론

  • 프레임절은 윈도우 함수에서 분석 범위를 명확히 정의합니다.
  • 물리적 행 위치를 명확히 다룰 때는 ROWS를, 논리적 값의 범위를 다룰 때는 RANGE를 사용합니다.
  • 적절한 프레임 설정을 통해 원하는 데이터를 정확히 분석할 수 있습니다.

 

반응형