Как рассчитать коэффициенты и создать сводный вывод объединенных таблиц в MySQL? - PullRequest
0 голосов
/ 17 июня 2019

У меня две таблицы заказов и реклама. Оба соединены, но теперь должны быть объединены. Как работает обычная функция разворота?

1 Ответ

1 голос
/ 17 июня 2019

Я думаю, что вы можете просто подсчитать количество пользователей в тесте и подписке и взять соотношение для каждой группы:

SELECT e.experiment_id,
       SUM( e.experiment_assignment = 'test' AND s.user_id IS NOT NULL AND s.subscription_event = 'subscription_start') / SUM(e.experiment_assignment = 'test') as test_ratio,
       SUM( e.experiment_assignment = 'control' AND s.user_id IS NOT NULL AND s.subscription_event = 'subscription_start') / SUM(e.experiment_assignment = 'test') as control_ratio
FROM experiments e LEFT JOIN 
     subscriptions s 
     ON e.user_id = s.user_id
GROUP BY e.experiment_id;

Это предполагает, что пользователи не дублируются ни в одной из таблиц для конкретного эксперимента..

РЕДАКТИРОВАТЬ:

Если есть дубликаты, используйте COUNT(DISTINCT):

SELECT e.experiment_id,
       (COUNT(DISTINCT CASE WHEN e.experiment_assignment = 'test' AND s.subscription_event = 'subscription_start' THEN s.user_id END) /
        COUNT(DISTINCT CASE WHEN e.experiment_assignment = 'test' THEN e.user_id END) 
       ) as test_ratio,
       (COUNT(DISTINCT CASE WHEN e.experiment_assignment = 'control' AND s.subscription_event = 'subscription_start' THEN s.user_id END) /
        COUNT(DISTINCT CASE WHEN e.experiment_assignment = 'control' THEN e.user_id END) 
       ) as control_ratio
FROM experiments e LEFT JOIN 
     subscriptions s 
     ON e.user_id = s.user_id
GROUP BY e.experiment_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...