ROW_NUMBER()로 고객별 구매 순서 분석하기
📊 고객의 구매 여정을 추적하는 방법
전자상거래 비즈니스에서 가장 중요한 분석 중 하나는 고객의 구매 패턴을 이해하는 것입니다. 첫 구매와 재구매 사이의 간격은 얼마나 될까요? 고객이 몇 번째 구매에서 가장 큰 금액을 지출할까요? 이러한 질문에 답하기 위해서는 각 고객의 구매 이력에 순서를 매길 수 있어야 합니다.
SQL의 윈도우 함수(Window Functions) 중 하나인 ROW_NUMBER()는 바로 이런 순위 매기기 작업에 최적화되어 있습니다.
🎯 윈도우 함수란?
윈도우 함수는 테이블의 행들을 특정 기준으로 그룹화하고, 각 그룹 내에서 계산을 수행하는 강력한 SQL 기능입니다. 일반적인 집계 함수와 달리, 윈도우 함수는 원본 행을 유지하면서 계산 결과를 추가할 수 있습니다.
ROW_NUMBER()의 기본 구조
ROW_NUMBER() OVER( PARTITION BY 그룹_컬럼 ORDER BY 정렬_컬럼 )
이 함수는 세 가지 핵심 요소로 구성됩니다:
- ROW_NUMBER(): 각 행에 고유한 순번을 부여하는 함수
- PARTITION BY: 데이터를 어떤 기준으로 그룹을 나눌지 지정 (선택사항)
- ORDER BY: 각 그룹 내에서 어떤 순서로 번호를 매길지 결정
💡 실무에서의 활용 예시
고객 분석
- 각 고객의 첫 구매, 두 번째 구매, 세 번째 구매 식별
- 구매 빈도와 LTV(Lifetime Value) 분석
- 고객 세그멘테이션 (신규 vs 재구매 고객)
제품 분석
- 카테고리별 베스트셀러 순위 매기기
- 시간대별 인기 상품 트래킹
성과 분석
- 월별 매출 상위 직원 랭킹
- 지역별 매장 성과 순위
🔍 다른 순위 함수들과의 차이
SQL에는 ROW_NUMBER() 외에도 RANK(), DENSE_RANK() 같은 순위 함수들이 있습니다. 이들의 차이점은 동점 처리 방식입니다:
- ROW_NUMBER(): 동점이어도 각 행에 고유한 번호 부여 (1, 2, 3, 4...)
- RANK(): 동점이면 같은 순위, 다음 순위는 건너뜀 (1, 2, 2, 4...)
- DENSE_RANK(): 동점이면 같은 순위, 다음 순위는 이어감 (1, 2, 2, 3...)
🎓 직접 연습해보세요
이론만으로는 부족합니다. 실제 전자상거래 데이터를 활용한 연습 문제를 통해 ROW_NUMBER() 함수를 마스터해보세요.
온라인 쇼핑몰의 주문 데이터에서 각 고객의 구매 이력을 시간순으로 번호를 매기는 쿼리를 작성하는 문제입니다. 실무에서 자주 마주치는 시나리오를 직접 해결하면서 윈도우 함수의 강력함을 체감할 수 있습니다.
난이도: Medium
예상 소요 시간: 10-15분
획득 포인트: 100점
SQL Growth
