데이터 분석/SQL
SQL) 윈도우 함수
engwoon
2024. 12. 3. 21:25
윈도우 함수
- OVER()절과 함께 사용된다.
- 행을 그룹화(PARTITION), 정렬(ORDER BY), 범위 설정(ROWS | RANGE)하여 다양한 함수들을 제공한다.
- 행 단위로 계산을 수행하여 결과를 출력한다.
- 기본문법
SELECT 윈도우함수(컬럼1) OVER (
[PARTITION BY 컬럼2] -- 그룹화
[ORDER BY 컬럼3 ASC|DESC] -- 정렬
[ROWS|RANGE BETWEEN A AND B] -- 계산 범위
) AS 결과
FROM 테이블;
- 진행순서
- 1. 데이터를 파티션으로 나눈다. (그룹화)
- 2. 각 그룹별로 데이터 정렬
- 3. 정렬된 데이터 내에서 연산범위 설정
- 4. 지정된 범위와 정렬에 따라 윈도우함수 값 계산
- 윈도우 함수 특징
- 집계함수의 확장: SUM, AVG 등 집계 결과를 "개별 행에 표시" -> 각 행의 데이터와 함께 집계 결과를 유지
- 원본 데이터 유지: 원본 데이터 + 윈도우 함수 결과를 동시에 확인 가능
- 다양한 기능의 함수 제공: 순위 매기기, 백분위 계산 등
- 언제 실행?
FROM → ON → JOIN → WHERE → GROUP BY → HAVING →[윈도우 함수]→ SELECT → DISTINCT → ORDER BY → LIMIT
* HAVING과 SELECT절 사이에서 실행된다.
윈도우 함수 종류
- 순위 함수 : rank(), dense_rank(), row_number()
- RANK(): 순위를 매기되, 여러 행의 값이 같으면 같은 순위를 준다. (공동순위)
- DENSE_RANK(): 여러 행의 값이 같으면 같은 순위를 준다. (다음 순위 건너뛰지 않음)
- ROW_NUMBER(): 동일한 값에 고유한 순위를 부여
- 집계함수 : sum() -> 그룹화된 데이터(파티션 내)에 대한 누적합 계산
- 행(row) 참조 함수: lag(), lead()
- lag(): 이전 행 참조
- lead(): 다음 행 참조
- 비율 함수: percent_rank() -> 데이터의 백분위 순위를 계산
파티션 범위 지정
- 윈도우 함수의 범위는 ROWS 또는 RANGE를 사용하여 지정한다.