powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не понимаю, как выводить, помогите плиз
4 сообщений из 4, страница 1 из 1
Не понимаю, как выводить, помогите плиз
    #40027453
sasha22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица событий, в которой собирается вся активность пользователя в продукте.
Колонки:
- user_id
- event_timestamp
- event_name
Нужно составить запрос, который вернёт таблицу вида:
- год и месяц появления пользователя в системе
- количество новых пользователей (пришедших в этом месяцу)
- вероятность возврата пользователя на второй месяц (30-60 день после первого появления в системе).

Примечание: в таблице нет информации про события регистрации или авторизации пользователя, поэтому, как я понял, дату именно регистрации можно установить по минимуму из дат событий с этим пользователем
...
Рейтинг: 0 / 0
Не понимаю, как выводить, помогите плиз
    #40027616
Фотография DSKalugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sasha22,
Результатом будет не одна таблица, а три:

1)год и месяц появления пользователя в системе
Код: plsql
1.
2.
3.
4.
select user_id, EXTRACT(YEAR FROM min(event_timestamp)) as Y, EXTRACT(MONTH FROM min(event_timestamp)) as M  
from  DATASET
group by user_id 
order by user_id


2)количество новых пользователей (пришедших в этом месяце = current_timestamp )
Код: plsql
1.
2.
3.
4.
select count(distinct user_id) 
from  DATASET
group by user_id 
having EXTRACT(YEAR FROM min(event_timestamp))=EXTRACT(YEAR FROM current_timestamp) and  EXTRACT(MONTH FROM min(event_timestamp))=EXTRACT(MONTH FROM current_timestamp)


3)про вероятность нужно уточнять
...
Рейтинг: 0 / 0
Не понимаю, как выводить, помогите плиз
    #40027639
KATEROK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Примерно так можно отобразить, когда появился юзер в первый раз + вернулся ли он через месяц:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select user_id, EXTRACT(YEAR FROM min(event_timestamp)) as Y, EXTRACT(MONTH FROM min(event_timestamp)) as M ,
(CASE WHEN EXISTS 
(SELECT * from DATASET WHERE event_timestamp BETWEEN (select min(event_timestamp) from DATASET d2 group by user_id HAVING d2.user_id = d1.user_id) + interval '30 days'
AND (select min(event_timestamp) from DATASET d2 group by user_id HAVING d2.user_id = d1.user_id) + interval '60 days'
FROM dataset d1)
THEN 'Пользователь вернулся'
ELSE 'Пользователь не вернулся') AS user_returning
from  DATASET
group by user_id 
order by user_id
...
Рейтинг: 0 / 0
Не понимаю, как выводить, помогите плиз
    #40027643
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одна и та же задача спустя 3 года.

sasha22, вот как-то так, да.
Далее вычленить первоприходцев отдельно РАНЕЕ текущего месяца, на них поделить кол-во тех из них, кто приходил на 2-й мес. Ну, собссно повторники сами такими окажутся.
Получится доля повторников. Её берём за оценку вероятности будущих повторников. И отдельно вычленить текущих новичков.

По технологии составления результирующего запроса. Можно без промежуточных курсоров, без With (...........), как встарь.
Создать нужные промежуточные запросы аналогично 1) и 2) или последующему.
Затем обернуть их в один внешний, а мож понадобится даже иерархически.
В промежуточных не требуется order by.
В (2) не нужен distinct поскольку в (1) есть group by user_id.

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


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