У меня есть следующие таблицы:
USERS: id, created_at, onboarding_started_at
INVITATIONS: id, user_id
Я работаю над написанием запроса, показывающего процент новых пользователей, отправивших 1 или более приглашений. Вот что у меня есть до сих пор:
SELECT floor(datediff(u.created_at, curdate()) / 7) AS weeks_ago,
count(DISTINCT u.id) AS "New Users in Cohort",
count(DISTINCT i.id) AS "Total Invites in Cohort",
count(DISTINCT i.user_id) AS "Uniq Users who invited Cohort",
count(DISTINCT u.id) / count(DISTINCT i.user_id) AS "% who invite"
FROM users u
LEFT JOIN invitations i
ON u.id = i.user_id
WHERE u.onboarding_started_at IS NOT NULL
GROUP BY weeks_ago;
В настоящее время это выводит «%, кто приглашает» неправильно. Пример данных:
weeks_ago | New Users in Cohort | Uniq Users who Invited Cohort | % who invite
-32 | 12 | 557 | 12 1.0000
В приведенном выше примере % who invite показывает 1,0000.
Что мне делать, чтобы исправить «%, кто приглашает»?
Я неправильно вычисляю Uniq Users who invited Cohort?
Спасибо
в течение недели/группы...
Очевидно, что новые пользователи связаны с приглашением в вашем наборе данных.
@GordonLinoff не следит за вашим комментарием...
. . Все пользователи имеют связанное приглашение в какой-то момент времени.
хм, не все пользователи отправляют приглашения, так что дело не в этом...
. . По вашим результатам все пользователи, соответствующие условию onboarding_started_at is not null, имеют связанное приглашение. То есть от count()s, а не от отношения - деление кажется нормальным.






Вы пробовали приводить значения как DECIMAL?
CAST(count(DISTINCT u.id) AS DECIMAL(7,2)) / CAST(count(DISTINCT i.user_id) AS DECIMAL(7,2))
Одно или несколько приглашений в течение недели? Или когда-нибудь?