본문 바로가기
DATABASE

Q. 재구매율이 가장 높은 상품 조회

by nyang2 2023. 11. 30.

필요 데이터:

데이터 모두 instacart002.order_products__prior

product_id  ➜ 상품ID

reordered   재구매 상품일 경우 1, 아닐 경우 0 으로 표시된 데이터

 

조회방법

 

1. 상품별 재구매율 조회

상품별로 재구매율을 구해주기 위해 우선 상품으로 그룹화를 해주어야 한다.
group by 를 이용하여 product_id 를 그룹화 해준다.

재구매율이란
재구매 한 횟수 / 전체 구매 수 를 계산하면 된다.

이때, 재구매 한 횟수는 reordered 데이터를 합해주면 된다. 재구매의 상품일 경우 1로 표시되어 있기 때문이다.
= sum(reordered)
전체 구매 수는 전체 행의 합을 구해주면 되기 때문에 count(*) 을 사용하면 된다.

따라서 sum(reordered) / count(*) 을 계산하면 재구매율이 나오게 된다.

 

 

2. (1) 번의 내용을 이용하여 순위 산출 (중복순위 방지)

해석
(1) 번에 있는 RET 데이터가 필요하기 때문에 (1) 번의 내용을 서브쿼리로 이용한다.

중복 순위를 방지하고 순위를 산출하기 위해 row_number() 함수를 이요한다.
그리고 재구매율 즉, RET 를 기준으로 순위를 산출할 것이기 때문에 order by RET 를 해준다.
재구매율이 많을 수록 1등이어야 하기 때문에 내림차순 즉, desc 를 해주어야 한다.
컬럼명은 RNK 로 설정한다.

 

 

3. (2) 번의 내용을 이용하여 Top 5 산출

해석
사실상 정렬이 되어있는 상태이기 때문에 limit 5 만 사용해도 구할 수는 있다.
하지만 정석대로 구하기 위해 서브쿼리를 이용해 구해보면
(2) 번에서 구한 RNK 데이터가 필요하기 때문에 (2) 번의 내용을 서브쿼리로 이용한다.

Top 5 만 산출하기 위해 where 조건절을 이용하여 RNK 가 1과 5 사이에 있는 데이터만 조회한다.