[SQL 분석] CH 4. HR 데이터를 통한 채용 기획하기 : Window Function

이진호·2024년 11월 13일

Window Function 이란?

  • 집계된 결과값을 기존 데이터에 추가하여 보여줌
  • 합계, 평균, 순위 매기기, 순서 조작 등 가능

사용 방법

예시

Window Function 과 Groupby 차이점

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

Groupby만 했을 때

(그룹 쌍만큼만 보여줌)

Window Function을 사용했을 때

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

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

Window Function : LEAD 와 LAG

사용 방법 (여기서 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 할건지도 설정할 수 있음

LEAD & LAG : ORDER BY 만 사용했을 때

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가 적용됨

LEAD & LAG : ORDER BY와 GROUP BY 모두 사용했을 때

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 활용에 대해 배울 것입니다.

0개의 댓글