유저 로그 테이블에서 특정 행동 이후 구매 전환한 사용자 수를 구하는 방법을 살펴보겠습니다.
샘플 데이터 생성에 필요한 쿼리와 샘플 데이터는 아래와 같습니다.
CREATE TABLE user_logs (
id SERIAL PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
action VARCHAR(50) NOT NULL,
order_amount NUMERIC(10, 2),
created_at TIMESTAMP NOT NULL
);
INSERT INTO user_logs (user_id, product_id, order_amount, action, created_at)
VALUES
(1, 100, 8000, 'failed_minimum_order', '2023-03-01 12:00:00'),
(1, 100, 15000, 'success', '2023-03-01 12:30:00'),
(2, 100, 7000, 'failed_minimum_order', '2023-03-02 15:00:00'),
(2, 100, 18000, 'success', '2023-03-02 16:00:00'),
(3, 100, 5000, 'failed_minimum_order', '2023-03-03 18:00:00'),
(3, 100, 12000, 'success', '2023-03-03 20:00:00'),
(4, 100, 6000, 'failed_minimum_order', '2023-03-04 09:00:00'),
(4, 100, 10000, 'success', '2023-03-04 09:30:00'), -- 30분 후 주문
(5, 100, 4000, 'failed_minimum_order', '2023-03-05 20:00:00'),
(5, 100, 25000, 'success', '2023-03-05 21:00:00'), -- 1시간 후 주문
(6, 100, 8000, 'failed_minimum_order', '2023-03-06 11:00:00'),
(6, 100, 16000, 'success', '2023-03-06 12:00:00'), -- 1시간 후 주문
(7, 100, 9000, 'failed_minimum_order', '2023-03-06 12:00:00'),
(7, 100, 13000, 'success', '2023-03-06 12:30:00'); -- 30분 후 주문
테이블에는 사용자 ID, 제품 ID, 수행된 작업(성공 또는 실패), 행동이 생성된 시간을 포함하여 사용자 주문에 대한 정보가 있습니다.
데이터는 임의로 만들었고 최소화시켰습니다.
아래 쿼리를 사용하여 최소 구매 금액 미 충족 후에 동일한 물건을 구매한 사용자 수를 확인합니다.
WITH failed_orders AS (
SELECT
user_id,
product_id,
order_amount,
created_at::date AS date
FROM
user_logs
WHERE
action = 'failed_minimum_order'
),
additional_orders AS (
SELECT
ul.user_id,
ul.product_id,
fo.date
FROM
user_logs as ul
JOIN
failed_orders as fo
ON
ul.user_id = fo.user_id
WHERE
ul.action = 'success'
AND ul.product_id = fo.product_id
-- 실패한 주문 이후 하루 이내에 발생한 성공한 주문건만 카운트
AND ul.created_at > fo.date
AND ul.created_at <= fo.date + INTERVAL '1 day'
)
select
date,
count(distinct user_id) as users_with_additional_orders
from
additional_orders
group by
1
order by
1
;
실패한 주문 이후 하루 이내에 발생한 성공한 주문 건만 카운트했는데, 일정 기간은 회사마다 다를 수 있습니다. 일반적으로 다음과 같습니다.
1. 하루 (24시간) : 이 기간은 고객이 처음 실패한 주문 직후에 다시 주문을 시도할 가능성이 가장 높기 때문에 많이 사용되는 기간입니다.
2. 3일 : 고객이 처음 주문에 실패한 이후에 몇 번 더 시도하거나, 다른 상품을 찾아볼 시간이 필요한 경우에 사용됩니다.
3. 일주일 (7일) : 일주일은 고객이 처음 주문에 실패한 이후에 다시 시도할 충분한 시간을 제공하며, 일부 회사에서는 주말이나 특정 요일에 다시 주문을 유도하려고 할 수 있습니다.
4. 한 달 (30일) : 이 기간은 고객이 처음 주문에 실패한 후에 다른 상품을 검토하고, 회사에서 새로운 마케팅 캠페인이나 할인을 제공할 시간을 갖는 경우에 사용됩니다.
이 외에도 한 세션 안에 해당 행동이 발생한 로직으로도 사용 합니다. 기간은 비즈니스 모델, 고객 행동 패턴, 마케팅 전략 등 다양한 요인에 따라 달라질 수 있습니다.
이와 같이 user_log 테이블에서 위의 쿼리 로직을 이용하여, 특정 행동 후에 특정 행동을 하는 경우의 이용자수와 전환율을 확인할 수 있습니다.
'Skills > SQL' 카테고리의 다른 글
PostgreSQL에서 JSON 데이터 추출하기 (0) | 2023.03.26 |
---|---|
[Presto SQL] 가격 범위 별 Item 개수 확인 (0) | 2023.03.25 |
SQL order by 특정 조건으로 정렬하기 (2) | 2023.03.18 |
SQL LIKE 대신 정규식 사용한 검색 방법: sql multiple like (0) | 2023.03.16 |
SQL을 활용한 임시 테이블 만들기 (0) | 2023.03.15 |