사용 방법

예시

둘 다 그룹화 집계 함수라는 공통점이 있지만, 아래처럼 차이가 있음

(그룹 쌍만큼만 보여줌)

(집계값이 새로운 컬럼으로 추가됨)

Window Function을 아래처럼 여러 개 사용할 수도 있음

SELECT JobLevel , PerformanceRating , count(DISTINCT hn.employeeNumber) AS group_cnt,
sum(count(DISTINCT hn.employeeNumber)) OVER (PARTITION BY hn.JobLevel) AS job_level_cnt,
sum(count(DISTINCT hn.employeeNumber)) OVER (PARTITION BY hn.PerformanceRating) AS performance_cnt
FROM hr.hr_num hn
LEFT JOIN hr.hr_cate hc
ON hn.EmployeeNumber =hc.EmployeeNumber
WHERE Attrition ='No'
GROUP BY 1,2
ORDER BY 1,2

사용 방법 (여기서 ORDER BY는 필수임. LEAD & LAG에서 ORDER BY는 정렬 기준이긴 하지만, Groupby랑 비슷한 결과를 내놓는 느낌)

예시

코드&실행결과
select JobLevel,
count(hn.EmployeeNumber) as hc,
lead(count(hn.EmployeeNumber)) over (order by JobLevel) As lead_hc,
lag(count(hn.EmployeeNumber)) over (order by JobLevel) as lag_hc
from hr.hr_cate hc
left join hr.hr_num hn on hc.EmployeeNumber = hn.EmployeeNumber
group by 1
order by 1

추가로, 몇 행씩 lead하고 lag 할건지도 설정할 수 있음

SELECT Department , hn.JobLevel ,
count(hn.EmployeeNumber) AS cnt,
lead(count(hn.EmployeeNumber)) OVER (ORDER BY hn.JobLevel),
lag(count(hn.EmployeeNumber)) OVER (ORDER BY hn.JobLevel)
FROM hr.hr_cate hc
LEFT JOIN hr.hr_num hn ON hc.EmployeeNumber =hn.EmployeeNumber
GROUP BY 1,2
ORDER BY 1,2

Department, JobLevel을 그룹핑한 값에 대해서가 아니라, JobLevel에 대해서만 LEAD 와 LAG가 적용됨
SELECT Department , hn.JobLevel ,
count(hn.EmployeeNumber) AS cnt,
lead(count(hn.EmployeeNumber)) OVER (PARTITION BY Department ORDER BY hn.JobLevel),
lag(count(hn.EmployeeNumber)) OVER (PARTITION BY Department ORDER BY hn.JobLevel)
FROM hr.hr_cate hc
LEFT JOIN hr.hr_num hn ON hc.EmployeeNumber =hn.EmployeeNumber
GROUP BY 1,2
ORDER BY 1,2

Department, JobLevel 두 기준을 그룹핑한 결과에 대해 LEAD와 LAG가 잘 적용됨
🔵 흥미로웠던 점:
평소에, groupby 보다 상위 그룹 기준으로 집계 컬럼을 추가하고 싶을 때가 있었는데, WINDOW FUNCTION을 이용하면 된다는 것을 배웠다.
🔵 다음 학습 계획:
POWER BI 활용에 대해 배울 것입니다.