powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Воронка продаж в postgres
3 сообщений из 3, страница 1 из 1
Воронка продаж в postgres
    #40128658
gggg111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Построить воронку продаж по странам вида: “country”, “installs”, “trials”,
“purchases”, “conversion_rate_to_trial”, “conversion_rate_to_purchase”

Ограничения: на 1 пользователя может быть только 1 оформление триала и 1 оформление purchase
Покупка возможна только по истечению платного периода.

Таблица:

DROP TABLE IF EXISTS events;
CREATE TABLE events
(
transaction_id SERIAL PRIMARY KEY,
datetime timestamp,
event_type VARCHAR(255) NOT NULL,
user_id INT NOT NULL,
country VARCHAR(255) NOT NULL
);
INSERT INTO events (transaction_id, datetime, event_type, user_id, country)
VALUES
(345642,'2021-01-03', 'installs', 3253, 'Russia'),
(353787,'2021-01-03', 'trial', 3253, 'Russia'),
(363568,'2021-01-10', 'purchase', 3253, 'Russia'),
(436561,'2021-01-05', 'installs', 3333, 'Russia'),
(252512,'2021-01-06', 'trial', 3333, 'Russia'),
(325368,'2021-01-13', 'purchase', 3333, 'Russia'),
(417809,'2021-01-03', 'installs', 3266, 'Brazil'),
(436556,'2021-01-14', 'installs', 3266, 'Brazil'),
(436578,'2021-01-16', 'trial', 3266, 'Brazil'),
(436800,'2021-01-23', 'purchase', 3266, 'Brazil')


Здесь рассчитал общее количество событий по типам:
SELECT country,
sum(case when event_type='trial' then 1 else 0 end) as trial,
sum(case when event_type='installs' then 1 else 0 end) as installs,
sum(case when event_type='purchase' then 1 else 0 end) as purchase
FROM events
GROUP BY country;


Но нужно еще учесть, то что загрузок может быть несколько. Т.е установил один раз, удалил, установил второй раз. Только после этого второй установки взял пробный период и только после него возможна покупка.
Пока не пойму как это реализовать.

with installs as (
select
distinct e.user_id
from events e
where e.event_type = 'installs'
),
trials as (
select
distinct e.user_id
from installs s
inner join events e on e.user_id = s.user_id
where e.event_type = 'trial'
),
purchases as (
select
distinct e.user_id
from trials a
inner join events e on e.user_id = a.user_id
where e.event_type = 'purchase'
)

select 'installs' as step, COUNT(*) from installs
union
select 'trials' as step, COUNT(*) from trials
union
select 'purchase' as step, COUNT(*) from purchases
order by count desc
;
...
Рейтинг: 0 / 0
Воронка продаж в postgres
    #40128661
gggg111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot gggg111#22424621]Построить воронку продаж по странам вида: “country”, “installs”, “trials”,
“purchases”, “conversion_rate_to_trial”, “conversion_rate_to_purchase”

Ограничения: на 1 пользователя может быть только 1 оформление триала и 1 оформление purchase
Покупка возможна только по истечению платного периода.

Таблица:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
DROP TABLE IF EXISTS events;
CREATE TABLE events
(
    transaction_id SERIAL PRIMARY KEY,
    datetime timestamp,
	event_type VARCHAR(255) NOT NULL,
	user_id INT NOT NULL,
	country VARCHAR(255) NOT NULL
);
INSERT INTO events (transaction_id, datetime, event_type, user_id, country) 
VALUES
(345642,'2021-01-03', 'installs', 3253, 'Russia'),
(353787,'2021-01-03', 'trial', 3253, 'Russia'),
(363568,'2021-01-10', 'purchase', 3253, 'Russia'),
(436561,'2021-01-05', 'installs', 3333, 'Russia'),
(252512,'2021-01-06', 'trial', 3333, 'Russia'),
(325368,'2021-01-13', 'purchase', 3333, 'Russia'),
(417809,'2021-01-03', 'installs', 3266, 'Brazil'),
(436556,'2021-01-14', 'installs', 3266, 'Brazil'),
(436578,'2021-01-16', 'trial', 3266, 'Brazil'),
(436800,'2021-01-23', 'purchase', 3266, 'Brazil'),
(324252,'2021-02-11', 'installs', 5555, 'Brazil'),
(124255,'2021-02-19', 'trial', 5555, 'Brazil'),
(124215,'2021-02-16', 'trial', 2546, 'Brazil'),
(124152,'2021-02-16', 'installs', 2546, 'Brazil')




Здесь рассчитал общее количество событий по типам:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT country,
 sum(case when event_type='trial' then 1 else 0 end) as trial,
 sum(case when event_type='installs' then 1 else 0 end) as installs,
 sum(case when event_type='purchase' then 1 else 0 end) as purchase
FROM events
GROUP BY country;




Но нужно еще учесть, то что загрузок может быть несколько. Т.е установил один раз, удалил, установил второй раз. Только после этого второй установки взял пробный период и только после него возможна покупка.
Пока не пойму как это реализовать.
...
Рейтинг: 0 / 0
Воронка продаж в postgres
    #40128764
gggg111
2021-01-03

это не datetime, а date
gggg111
(353787,'2021-01-03', 'trial', 3253, 'Russia'),

'trial' - должен быть в виде цифры, а само слово - в словаре
gggg111
Но нужно еще учесть, то что загрузок может быть несколько. Т.е установил один раз, удалил, установил второй раз.

ну и что, триал то 1
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Воронка продаж в postgres
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]