[SQL]_윈도우함수_중요개념

DONGYOON KIM·2024년 4월 11일

SQL

목록 보기
13/14

SQL에서 윈도우 함수(Window Functions)는 행 집합에 대한 계산을 수행하되, 조회된 행을 개별적으로 반환하면서도 다른 행의 값에 기반한 계산을 가능하게 합니다. 이러한 함수들은 데이터 분석과 복잡한 집계 연산에 매우 유용하며, SQL 표준에서는 다양한 윈도우 함수를 정의하고 있습니다. 여기서는 가장 일반적으로 사용되는 윈도우 함수들의 종류를 소개합니다.

1. 집계 함수(Aggregate Functions)

기본적인 SQL 집계 함수들(SUM, AVG, COUNT, MAX, MIN 등)은 윈도우 함수로도 사용될 수 있습니다. 이 경우, OVER 절을 사용하여 집계 범위(파티션)와 순서를 지정할 수 있습니다.

SUM(column) OVER (PARTITION BY column2 ORDER BY column3)

2. 순위 함수(Ranking Functions)

  • ROW_NUMBER(): 파티션 내에서 행에 순차적인 숫자를 할당합니다. 동일한 값이 있어도 고유한 순위를 부여합니다.
  • RANK(): 동일한 값에 대해 같은 순위를 부여하고, 다음 순위는 중복 개수를 고려하여 건너뜁니다.
  • DENSE_RANK(): RANK()와 비슷하지만 중복된 순위에 대해 건너뛰지 않고 연속적인 순위를 부여합니다.
  • NTILE(n): 파티션을 n개의 동일한 크기로 분할하고, 각 행이 속하는 분할 번호를 반환합니다.

3. 분석 함수(Analytic Functions)

  • LEAD(column, n, default): 지정된 행보다 n행 뒤에 있는 값에 접근합니다. 데이터가 없는 경우 default 값 사용.
  • LAG(column, n, default): 지정된 행보다 n행 앞에 있는 값에 접근합니다. 데이터가 없는 경우 default 값 사용.
  • FIRST_VALUE(column): 파티션 내에서 첫 번째 값을 반환합니다.
  • LAST_VALUE(column): 파티션 내에서 마지막 값을 반환합니다. ROWS BETWEEN 절과 함께 사용할 때 주의가 필요합니다.
  • PERCENT_RANK(): 행의 백분위 순위를 계산합니다.
  • CUME_DIST(): 누적 분포 값을 계산합니다.

4. 프레임 명세(Frame Specification)

윈도우 함수는 ROWS 또는 RANGE를 사용하여 특정 "프레임" 내에서 작동하도록 세밀하게 조정할 수 있습니다. 이를 통해 현재 행을 기준으로 앞뒤로 특정 범위의 데이터에 대한 계산을 수행할 수 있습니다.

SUM(column) OVER (PARTITION BY column2 ORDER BY column3 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)

윈도우 함수는 복잡한 데이터 분석을 SQL 쿼리 내에서 직접 수행할 수 있게 해주며, 효율적인 데이터 처리와 보고서 작성에 큰 도움을 줍니다. 다양한 윈도우 함수와 옵션을 적절히 조합하여 사용함으로써, 데이터에 대한 깊은 통찰력을 얻을 수 있습니다.

SQL의 윈도우 함수에서 PARTITION BY 절을 사용할 때 여러 컬럼을 기준으로 파티션을 나눌 수 있습니다. 이를 통해 더 세밀한 분류를 기반으로 집계나 순위 등의 연산을 수행할 수 있으며, 분석의 유연성을 크게 높일 수 있습니다.

예를 들어, 판매 데이터가 있고, 각 판매에 대한 연도별, 지역별 판매량의 합계를 구하고 싶다면, YEAR 컬럼과 REGION 컬럼을 함께 PARTITION BY 절에 지정할 수 있습니다. 이렇게 하면 연도와 지역별로 데이터를 그룹화하여 집계를 수행할 수 있습니다.

SELECT
  YEAR,
  REGION,
  SALES,
  SUM(SALES) OVER (PARTITION BY YEAR, REGION) AS TOTAL_SALES
FROM
  SALES_DATA;

이 쿼리는 SALES_DATA 테이블에서 각 행에 대해 연도(YEAR)와 지역(REGION)별로 판매량(SALES)의 합계(TOTAL_SALES)를 계산합니다. PARTITION BY 절에 여러 컬럼을 지정함으로써, 연도와 지역의 조합에 따른 그룹화가 이루어지고, 그룹 내에서의 합계를 계산할 수 있습니다.

0개의 댓글