sql 쿼리 : 특정 카테고리 직전 및 직후 구매한 카테고리

조회수 146회

안녕하세요 SQL 조금씩 사용중인 마케터입니다. 업무중 쿼리 작성에 어려움을 겪어 여기에 질문드리게 되었습니다

먼저 테이블은 아래와 같습니다.

TS 카테고리 회원번호 
2022-12-22 23:08 식품 1 
2022-12-22 21:02 전자제품 2 
....... 
2022-12-23 10:10 의류 1

위처럼 각 회원의 구매시간과 구매 카테고리가 있는데요! 특정 카테고리 직전 및 직후 구매한 카테고리를 찾고 싶은데 어떻게 쿼리를 짜면 좋을지 조언 부탁드립니다.

EX) 전자제품 직전 및 직후 구매 카테고리 직전 및 직후 구매 이력없을 시 NULL

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    이런 복잡한 작업은 쿼리로 모든 걸 해결하려고 하기보다는 엑셀과 엮어서 사용하면 좋습니다.

    실제 사례로 보여드리고 싶어서 프로그래머스에서 비슷한 문제를 찾아봤습니다.

    재구매가 일어난 상품과 회원 리스트 구하기

    이 문제를 기반으로 설명 드릴게요. 이 문제에서 특정 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로 하고 가공은 엑셀로 하는걸 추천드려요.

    • 이제야 확인했네요 유용하게 사용했습니다. 감사합니다 :) 박옥 2022.12.27 15:07

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)