sql 쿼리 : 특정 카테고리 직전 및 직후 구매한 카테고리
조회수 457회
안녕하세요 SQL 조금씩 사용중인 마케터입니다. 업무중 쿼리 작성에 어려움을 겪어 여기에 질문드리게 되었습니다
먼저 테이블은 아래와 같습니다.
TS 카테고리 회원번호
2022-12-22 23:08 식품 1
2022-12-22 21:02 전자제품 2
.......
2022-12-23 10:10 의류 1
위처럼 각 회원의 구매시간과 구매 카테고리가 있는데요! 특정 카테고리 직전 및 직후 구매한 카테고리를 찾고 싶은데 어떻게 쿼리를 짜면 좋을지 조언 부탁드립니다.
EX) 전자제품 직전 및 직후 구매 카테고리 직전 및 직후 구매 이력없을 시 NULL
1 답변
-
이런 복잡한 작업은 쿼리로 모든 걸 해결하려고 하기보다는 엑셀과 엮어서 사용하면 좋습니다.
실제 사례로 보여드리고 싶어서 프로그래머스에서 비슷한 문제를 찾아봤습니다.
이 문제를 기반으로 설명 드릴게요. 이 문제에서 특정 Product를 구매한 고객이, 그 이전/이후에 구매한 Product를 구하는 방법을 알려드리면 똑같이 적용하실 수 있을 것 같아요.
(1) 해당 상품을 구매한 사용자의 모든 구매 내역을 불러온다.
SELECT * FROM online_sale JOIN ( SELECT distinct(user_id) FROM online_sale WHERE product_id = 12 ) target_users ON target_users.user_id = online_sale.user_id ORDER BY online_sale.user_id, sales_date;
이렇게 하면 12번 상품을 구매한 사용자의 모든 구매 내역을 불러올 수 있습니다. 위 문제에서 실행하면 이렇게 나오네요.(위에 있는 링크에 들어가서 이 SQL을 붙여넣고 실행 버튼을 눌러 보세요. 실행 버튼에서 왼쪽에 길게 배치된 문제도 한 번 읽어보시면 더 이해가 잘 될 겁니다.)
online_sale_id user_id product_id sales_amount sales_date user_id 104 5 12 1 2022-02-23 00:00:00 5 15 15 12 3 2022-01-05 00:00:00 15 48 15 12 3 2022-01-24 00:00:00 15 88 53 12 1 2022-02-13 00:00:00 53 69 72 12 1 2022-02-06 00:00:00 72 54 114 1 1 2022-01-27 00:00:00 114 101 114 12 1 2022-02-20 00:00:00 114 11 117 7 1 2022-01-05 00:00:00 117 27 117 12 1 2022-01-12 00:00:00 117 60 117 22 1 2022-01-31 00:00:00 117 73 119 12 1 2022-02-07 00:00:00 119 109 119 12 1 2022-02-25 00:00:00 119 (2) 엑셀에서 가공한다.
가지고 계신 데이터는 이것보다 훨씬 클 거니까 이 내용을 엑셀에 붙여 넣습니다. 그리고 G2셀에(user_id가 F칼럼까지 붙을거니까 그 다음 칼럼. 첫째줄은 데이터가 아니니까 두번째 줄 부터)에 이런 수식을 넣어 보세요.
=if(AND(C3=12, F2=F3), "대상 상품 이전에 구매한 상품","아무것도 아님")
이렇게 하면 2번째 줄의 데이터가 3번째 줄의 구매자와 같은지 확인하고, 또 3번째 줄의 구매한 상품이 대상 상품(12번)인지 확인할 수 있습니다. 둘 다 만족하면 우리가 원하던 데이터이지요.같은 방법으로 H2셀에 수식을 작성하시면 대상 상품 이후에 구매한 상품도 구할 수 있을겁니다.
이런걸 다 SQL로 짤 수 있으려면 SQL을 너무 많이 배워야 해기도 하고, 그 코드 짜는데 시간이 더 걸리는 경우도 많아요. 그래서 개발자가 아니시라면 추출만 SQL로 하고 가공은 엑셀로 하는걸 추천드려요.
댓글 입력