mysql - 如何在 mySQL 中计算比率并创建连接表的透视输出?

标签 mysql sql

我有两张 table 订单和广告。两者都已合并,但现在需要进行调整。常规枢轴函数如何工作?

最佳答案

我认为你可以只计算测试和订阅中的用户数量,并计算每个组的比例:

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;

关于mysql - 如何在 mySQL 中计算比率并创建连接表的透视输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56623682/

相关文章:

php - Eloquent :只从时间戳中获取日期

mysql - Drupal 6 我可以截断数据库中的批处理表吗

mySQL - 多个表的外键?

mysql - 即使在相关表中找不到相关记录,也可以从一个表中检索所有记录

sql - 查找半径重叠的Geopoint

mysql - mysql select 语句中的 if isnull

mysql - 32 位和 64 位的 yum 存储库设置、mysql 连接器

sql - RDBM 中 NULL 的替代方法

php - MySql 条件 SQL。我的场景可能吗?

mysql - 用户拥有/管理其他用户