Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- 그로스해킹
- regexp
- 독서
- 데이터분석
- Retention
- 리텐션
- 린분석
- 서브쿼리
- 취준
- 프로그래머스
- 윈도우함수
- dense_rank
- Datarian
- LEFTJOIN
- funnel
- row_number
- rank
- advent of sql
- 데이터리안
- 신입 데이터분석가
- 누적합
- leetcode
- 윈도우 함수
- 순위함수
- MYSQL
- pandas
- SolveSQL
- SQL
- 퍼널분석
- python
Archives
- Today
- Total
데이터 분석
[플레이그라운드] 1분기 동안의 고객별 인기 상품 Top3 본문
문제 상황
고객별 인기 상품 정보를 바탕으로 교차 판매 및 상향 판매 전략을 수립하기 위한 비즈니스 시나리오를 가정하고, 1분기 동안의 고객별 인기 상품 Top3을 조회해 보았다.
단, 주문 수량이 10/9/9/8였다면 상위 주문 수량 3개는 10/9/8 이므로 총 4개의 상품명을 출력한다.
Solution
WITH step1 AS (
SELECT customer_id
, product_name
, SUM(quantity) AS total_quantity
FROM records
WHERE order_date BETWEEN '2020-01-01' AND '2020-03-31'
GROUP BY customer_id, product_name
), step2 AS (
SELECT *
, DENSE_RANK() OVER (PARTITION BY customer_id ORDER BY total_quantity DESC) AS dense_rk
FROM step1
)
SELECT customer_id
, product_name
, total_quantity
FROM step2
WHERE dense_rk <= 3
ORDER BY customer_id, total_quantity DESC
- step1 cte :
1분기 동안의 고객, 상품명을 기준으로 주문 수량의 합계를 집계 - step2 cte :
고객별 주문 수량을 내림차순 정렬하여 순위를 부여 - 최종 select :
주문 수량이 많은 상위 3개의 상품명만 필터링

💡위 결과를 바탕으로 연관 상품을 추천하거나 더 높은 가치의 상품 구매를 유도하는 전략을 세워, 고객당 평균 구매액(ARPU)을 증가시키는 데 활용할 수 있을 것 같다.
'SQL > solvesql' 카테고리의 다른 글
| [플레이그라운드] 코호트 리텐션 계산 (0) | 2025.03.07 |
|---|---|
| [플레이그라운드] 카테고리별 매출액, 총매출액, 비율 집계 (0) | 2025.03.03 |
| solvesql | 레스토랑의 요일별 VIP (1) | 2025.01.24 |
| solvesql | 다음날도 서울숲의 미세먼지 농도는 나쁨 😵💫 (2) | 2025.01.24 |
| [Day 24] solvesql | Advent of SQL 2024 | 이상 사용자 탐지💡 (2) | 2024.12.25 |