PARTITION BY
PARTITION BY 구문은 윈도우 함수의 실행 방식을 구성하는 데 필수적인 구문이며, 윈도우 함수의 작용 범위를 세분화하는 역할을 합니다. 이 구문은 결과 세트를 특정 열(들)의 값에 따라 여러 파티션이나 그룹으로 나누는 데 사용됩니다. 이렇게 분할함으로써, 각 그룹내에서 집계 함수(AVG, SUM, COUNT 등)를 독립적으로 적용할 수 있으며, 각 행에 대한 계산을 그룹별로 수행할 수 있습니다.
예를 들어, 직원들의 급여에 대한 데이터가 있고 부서별로 평균 급여를 계산하고 싶다고 가정한다면, 이 경우 `PARTITION BY` 구분을 사용하여 부서별로 데이터를 파티션하고, 각 부서 내에서 평균 급여를 계산할 수 있습니다.
SELECT 부서,
이름,
급여,
AVG(급여) OVER (PARTITION BY 부서) AS 부서별_평균_급여
FROM 직원;
RAW 데이터 테이블
부서 | 이름 | 급여 |
영업 | 홍길동 | 3000 |
영업 | 김철수 | 3500 |
개발 | 이영희 | 4000 |
개발 | 박민수 | 4200 |
인사 | 최영미 | 2800 |
인사 | 김영호 | 2900 |
PARTITION BY 구문으로 계산한 테이블
부서 | 이름 | 급여 | 부서별_평균_급여 |
영업 | 홍길동 | 3000 | 3250.0 |
영업 | 김철수 | 3500 | 3250.0 |
개발 | 이영희 | 4000 | 4100.0 |
개발 | 박민수 | 4200 | 4100.0 |
인사 | 최영미 | 2800 | 2850.0 |
인사 | 김영호 | 2900 | 2850.0 |
윈도우 함수(Window Functions)
1. 집계 함수(Agreegate Functions)
- SUM()
- AVG()
- COUNT()
- MAX()
- MIN()
2. 순위 함수(Ranking Functions)
- ROW_NUMBER()
- RANK() : 동일한 값을 가진 행들에 동일한 값을 부여하고 순위에 건너뛰기를 적용합니다.
- DENSE_RANK() : RANK()와 비슷하지만, 순위에 건너뛰기 없이 연속적인 순위를 부여합니다.
- NTILE(N): 결과 세트를 N 개의 동일한 크기의 그룹으로 나누고, 각 행에 그룹 번호를 할당합니다.
3. 분석 함수(Analytic Functions)
- LEAD()
- LAG()
- FIRST_VALUE()
- LAST_VALUE()
- RATIO_TO_REPORT() : 전체에 대한 현재 행의 값의 비율을 계산합니다.
4. 통계 함수(Statistical Functions)
- STDDEV()
- VARIANCE()
5. 분포 함수(Distribution Functions)
- CUME_DIST() : 현재 행의 누적 분포 값을 계산합니다.
- PERCENT_RANK() : 현재 행의 백분위 순위를 계산합니다.
'Archive > SQLD' 카테고리의 다른 글
[SQLD] SQL 기본 (0) | 2024.02.24 |
---|---|
[SQLD] 데이터 모델과 성능 (0) | 2024.02.21 |
[SQLD] 데이터 모델링의 이해 (0) | 2024.02.19 |
[SQLD] 조인 (Join) (0) | 2024.02.19 |
[SQLD] 인덱스 (0) | 2024.02.18 |