SUM(), AVG(), COUNT(), RANK(), ROW_NUMBER(), LAG()/LEAD() 등OVER (PARTITION BY ~ ORDER BY ~) 구문을 통해 파티션(그룹화 기준)과 정렬 기준을 지정할 수 있습니다.예시 문법:
sql
코드 복사
SELECT
WINDOW_FUNCTION(컬럼)
OVER (
PARTITION BY 기준컬럼1, 기준컬럼2
ORDER BY 정렬기준컬럼
) AS 별칭
FROM 테이블;
SELECT JobLevel, COUNT(*) FROM table GROUP BY JobLevel;SELECT JobLevel, COUNT(*) OVER (PARTITION BY JobLevel) FROM table; → 동일한 JobLevel을 가진 행 각각에 전체 COUNT 결과가 표시둘 다 “집계 함수”를 쓰지만, 집계 결과 표시 방식이 다르다는 점을 꼭 구분해야 합니다.
아래 예시는 특정 HR 데이터에서 JobLevel, PerformanceRating 별로 각각 몇 명인지(count) 확인하고, 그 결과를 다시 다른 기준으로 합산하는 윈도우 함수를 사용한 사례입니다.
sql
코드 복사
SELECT
JobLevel,
PerformanceRating,
COUNT(hn.EmployeeNumber) AS hc,
/* 윈도우 함수 예시 1: JobLevel 기준으로 count 누적 합산 */
SUM(COUNT(hn.EmployeeNumber))
OVER (PARTITION BY JobLevel) AS hc_job_level,
/* 윈도우 함수 예시 2: PerformanceRating 기준으로 count 누적 합산 */
SUM(COUNT(hn.EmployeeNumber))
OVER (PARTITION BY PerformanceRating) AS hc_perform_level
FROM hr.hr_number hn
LEFT JOIN hr.hr_cate hc
ON hn.EmployeeNumber = hc.EmployeeNumber
WHERE Attrition = 'No'
GROUP BY 1, 2
ORDER BY 1, 2;
COUNT(hn.EmployeeNumber) AS hc: (JobLevel, PerformanceRating) 조합별 인원수SUM(COUNT(hn.EmployeeNumber)) OVER (PARTITION BY JobLevel) AS hc_job_levelSUM(COUNT(hn.EmployeeNumber)) OVER (PARTITION BY PerformanceRating) AS hc_perform_level| JobLevel | PerformanceRating | hc | hc_job_level | hc_perform_level |
|---|---|---|---|---|
| 1 | 3 | 400 | 1044 | 408 |
| 1 | 4 | 61 | 1044 | 189 |
| 2 | 3 | 408 | 482 | 408 |
| 2 | 4 | 74 | 482 | 189 |
| 3 | 3 | 157 | 186 | 408 |
| 3 | 4 | 29 | 186 | 189 |
| ... | ... | ... | ... | ... |
이처럼 Window 함수를 적용하면, 한 번의 GROUP BY 결과를 여러 파티션 기준으로 추가 집계하여 원본과 같은 행 수로 보여줄 수 있습니다.
SUM(컬럼) OVER (ORDER BY 날짜 ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 형태로 과거부터 현재까지 누적 합계를 구할 수 있음PARTITION BY Region, ProductCategory| 구분 | GROUP BY | Window Function (OVER) |
|---|---|---|
| 핵심 특징 | 그룹별로 요약 → 행 개수 줄어듦 | 기존 행 유지 + 집계 결과를 추가 열로 표시 |
| 집계 결과 표시 | 그룹별 1행 | 각 행마다 표시 (파티션 기준 동등한 결과 공유) |
| 사용 구문 | SELECT 컬럼, 집계함수() FROM ~ GROUP BY 컬럼 | SELECT 컬럼, 집계함수() OVER (PARTITION BY ~ ORDER BY ~) FROM ~ |
| 대표적 활용 | 단순 요약 통계 (ex. 부서별 인원수, 국가별 매출) | RANK, 누적 합계, 이전/다음 행 참조, 파티션별 전체집계와 함께 표시 등 |
| 행 개수 | 그룹화로 인해 ‘집계 결과만’ 남음 | 원본 행 수 변하지 않음 |
이처럼 Window 함수는 데이터를 더 깊이 분석하거나, 순위 매기기/누적합/이전 행 비교 등을 손쉽게 할 수 있게 해 줍니다.