9.1. 윈도우 함수

9.1.1. 윈도우 함수 개요

윈도우 함수는 테이블 내의 특정 범위인 윈도우가 포함한 행들을 대상으로 연산을 수행합니다. 윈도우가 포함하고 있는 테이블의 행에 대한 집계, 순위, 비율 등의 연산을 수행할 수 있습니다. 윈도우 함수는 **GROUP BY**와 유사한 방식으로 데이터를 그룹화하고 집계합니다. **GROUP BY**는 데이터를 그룹별로 하나의 행을 반환합니다.

하지만, 윈도우함수는 결과를 단일 값으로 축소하지 않고 윈도우 범위에 따라 각 행에 대한 새로운 값을 반환하여 원본 데이터의 행 수를 유지한다는 점에서 **GROUP BY**와 차이가 있습니다.

9.1.2. 윈도우 함수 특징

아래 4가지의 특징인 ‘계산의 다양성’, ‘성능 향상’, ‘코드의 간결성’, ‘분석의 편의성’을 위해 윈도우 함수를 사용합니다. 데이터 분석 및 집계 작업을 더 유연하게 수행할 수 있으며, 복잡한 데이터 분석 작업을 단순화할 수 있습니다.

  1. 계산의 다양성 : 평균(AVG), 합계(SUM), 카운트(COUNT) 등 계산을 각 행에 수행할 수 있습니다.
  2. 쿼리 성능 향상 : 윈도우 함수는 중간 결과를 캐싱하므로 여러 번의 계산이 필요 없습니다.
  3. 코드의 간결성 : 복잡한 쿼리를 더 간결하게 작성할 수 있어 코드의 유지보수가 용이합니다.
  4. 분석의 편의성 : 특정 범위의 데이터 분석이 용이하여 시계열, 순위/비율 계산 등을 수행합니다.

SQL 데이터베이스 시스템(PostgreSQL, MySQL, SQL Server, Oracle)에서 지원되며, 데이터베이스 시스템에 따라 문법과 지원하는 윈도우 함수가 다를 수 있습니다.

<aside> 💡 윈도우 함수는 결과 집합의 특정 윈도우에 걸쳐 계산을 수행하는 데 설계되었습니다. 이러한 연산의 특성상 다른 윈도우 함수 내에서 중첩하여 윈도우 함수를 호출하는 것은 SQL 표준에서 허용되지 않습니다.

</aside>

9.1.3. 윈도우 함수 구성요소

윈도우 함수는 특정 범위의 윈도우에 연산을 적용하게 해주는 기능입니다. 윈도우 함수는 특정 행의 구문 내에서 연산을 수행하면서 그룹화 없이 각 행을 개별적으로 반환합니다.

SELECT WINDOW_FUNCTION(ARGUMENTS) OVER(PARTITION BY column [1|2|,,]
																			 ORDER BY [1|2|,,] WINDOW_frame)
FROM Table1;