본문 바로가기
DATABASE

Q. 장바구니에 가장 먼저 넣은 상품 조회

by nyang2 2023. 11. 28.

필요 데이터 :

데이터 모두 instacart002.order_products__prior

장바구니에 넣은 순서 ➜ add_to_cart_order

제품 ID ➜ product_id

조회방법

 

1. add_to_cart_order 데이터가 1이 아닌 것을 모두 0으로 분류 (컬럼명 1st)

해석
장바구니에 가장 먼저 넣은 상품을 조회할 것이기 때문에 가장 먼저 넣지 않은 데이터는 필요 없음
그렇기 때문에 case when 문을 이용하여 
add_to_cart_order 데이터가 1이면 1, 아니면 0으로 변경

 

 

2. 상품별 장바구니에 가장 먼저 넣은 상품의 합계 조회

해석
(1) 번에서 구해준 1st 의 합게를 구해주면 된다. 모두 1로 변경해주었기 때문에 sum() 집계함수를 이용해서 구하면 된다.
또한 상품별로 구해주어야 하기 때문에 group by  를 이용하여 상품으로 그룹화해준다.

 

 

3. (2) 번의 내용을 이용하여 순위 산출. 중복 순위 방지할 것, 컬럼명 = RNK

해석
중복 순위를 방지하고 순위를 산출하기 위해 row_number() 함수를 이용한다.
그리고 1st 를 기준으로 순위 산출을 할 것이기 때문에 order by 1st 를 해준다.
1st 가 클 수록 1등이어야 하기 때문에 내림차순 desc 를 해주어야 한다.

컬럼명은 rnk 로 설정한다.

 

 

4. (3) 번의 내용을 이용하여 Top 10 산출

해석
(3) 번의 내용을 서브쿼리로 이용한다.
조건절 where 을 사용해서 top 10 만 산출해준다.
between A and B ➜ A 와 B 사이의 값을 가져온다.

 

5. (2) 번의 내용에서 순위함수를 사용하지 않고 TOP 10 산출

(추천하지는 않는 방법입니다. 서브쿼리와 랭크함수를 이용하지 않아 빠르게 구할 때 사용하면 편합니다.)

해석
(2) 번의 내용에서 구해준 1st 로 순위를 산출해야하기 때문에
order by 1st desc 를 이용하여 1st 가 큰 순으로 정렬해준다. 1st 가 클 수록 위에 출력되어야 하기 때문에 내림차순, desc 를 꼭 사용해주어야 한다.
그러면 1st 가 더 많은 것 순으로 결과값이 출력되게 된다.
여기서 limit 10 을 이용해 결과값을 10개로 제한시키면 10등까지 구한 것 같이 보이게 된다.