SQL-запрос для определения процента пользователей в когорте, отправивших 1 или более приглашений

У меня есть следующие таблицы:

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?

Спасибо

Одно или несколько приглашений в течение недели? Или когда-нибудь?

Gordon Linoff 23.04.2019 22:42

в течение недели/группы...

AnnaSm 23.04.2019 22:43

Очевидно, что новые пользователи связаны с приглашением в вашем наборе данных.

Gordon Linoff 23.04.2019 22:47

@GordonLinoff не следит за вашим комментарием...

AnnaSm 23.04.2019 22:49

. . Все пользователи имеют связанное приглашение в какой-то момент времени.

Gordon Linoff 23.04.2019 23:13

хм, не все пользователи отправляют приглашения, так что дело не в этом...

AnnaSm 23.04.2019 23:16

. . По вашим результатам все пользователи, соответствующие условию onboarding_started_at is not null, имеют связанное приглашение. То есть от count()s, а не от отношения - деление кажется нормальным.

Gordon Linoff 23.04.2019 23:19
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
7
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы пробовали приводить значения как DECIMAL?

CAST(count(DISTINCT u.id) AS DECIMAL(7,2)) / CAST(count(DISTINCT i.user_id) AS DECIMAL(7,2))

Другие вопросы по теме