15

"부서별 급여 순위 좀 뽑아줘"

Day 1: 행 순서대로 번호 매기고 싶은데

학습 목표

윈도우 함수가 필요한 실무 상황을 이해한다 기존 방식의 한계를 체감한다

월요일 아침, 인사팀 요청

"이번 달 성과 평가 때문에 그러는데... 각 부서별로 급여 순위 1~3등 좀 뽑아줄 수 있어? 오늘 중으로 가능할까?"

"네, 금방 해드릴게요."

일단 전체 급여 순위부터 해보자.

에디터 로딩 중...

음, 정렬은 되는데... 순위 번호는 어떻게 붙이지?


첫 번째 시도: 서브쿼리

에디터 로딩 중...

동작은 하는데...

  • 느리다: 각 행마다 서브쿼리 실행 (1000명이면 1000번)
  • 동점 처리가 이상하다: 같은 급여면 같은 순위가 되어야 하는데?
  • 부서별 순위는?: 더 복잡해진다

두 번째 시도: 변수 사용 (MySQL)

에디터 로딩 중...

동작은 하지만...

  • 표준 SQL 아님: PostgreSQL, BigQuery에서 안 됨
  • 부서별 리셋: 부서가 바뀔 때마다 @rank를 1로?
  • 동점 처리: 여전히 복잡

정답은 윈도우 함수

에디터 로딩 중...

한 줄 추가로 끝!

부서별 순위도 간단하다:

에디터 로딩 중...

오늘 배울 것

  1. 윈도우 함수란: GROUP BY 없이 각 행에 계산 결과 추가
  2. ROW_NUMBER(): 무조건 1, 2, 3, 4... 순서 번호
  3. RANK(): 동점이면 같은 순위 (1, 1, 3, 4...)
  4. DENSE_RANK(): 동점 후에도 연속 (1, 1, 2, 3...)
  5. PARTITION BY: "부서별", "월별" 그룹 내 순위

이거 알면 "부서별 상위 3명", "월별 매출 순위" 같은 요청이 5분 안에 끝난다.