Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找转换率_Sql - Fatal编程技术网

Sql 查找转换率

Sql 查找转换率,sql,Sql,我有两个列表,每个项目都有订阅结果。我需要知道每个实验的转化率 我的桌子是: 我想要的结果是 转换是指除试用启动事件外还有订阅启动事件的任何用户(所有用户都有试用启动事件)。如果一个用户同时在多个实验中,可以将它们计入每个实验的转换率中,也可以希望每个实验只返回一行 我已经做了一个内部连接来获得订阅事件和实验id,但可以进一步处理。谢谢你的帮助/ 我的内部联接表看起来像 我认为这是一个带有过滤和聚合功能的左连接: select e.experiment_id, (count(c

我有两个列表,每个项目都有订阅结果。我需要知道每个实验的转化率

我的桌子是:

我想要的结果是

转换是指除试用启动事件外还有订阅启动事件的任何用户(所有用户都有试用启动事件)。如果一个用户同时在多个实验中,可以将它们计入每个实验的转换率中,也可以希望每个实验只返回一行

我已经做了一个内部连接来获得订阅事件和实验id,但可以进一步处理。谢谢你的帮助/

我的内部联接表看起来像


我认为这是一个带有过滤和聚合功能的
左连接:

select e.experiment_id,
       (count(case when experiment_assignment = 'test' then s.user_id end) * 1.0 /
        sum(case when experiment_assignment = 'test' then 1 else 0 end)
      ) as test_conversion_rate,
       (count(case when experiment_assignment = 'control' then s.user_id end) * 1.0 /
        sum(case when experiment_assignment = 'control' then 1 else 0 end)
      ) as control_conversion_rate
from experiment e left join
     subscription s
     on s.user_id = e.user_id and
        s.subscription_event = 'subscription_start'
group by e.experiment_id;
选择实验\u id,
(计数(当实验分配=‘测试’和订阅事件=“订阅开始”然后用户id结束时的情况)*100/
计数(当实验\分配='测试'和订阅\事件=“试用\开始”然后是用户\ id时的情况)
)作为测试转换率,
(计数(当实验分配=‘控制’和订阅事件=“订阅开始”然后用户id结束时的情况)*100/
计数(当实验分配='control'和订阅事件='trial\u start'然后用户id结束时的情况)
)as控制转换率
从实验内部加入订阅
关于用户标识
按实验分组;

嘿,戈登-谢谢你的帮助。但你的结果是1或0,而不是100%。你能告诉我需要什么样的改变才能得到输出吗?@SumaiyaKhatun。您尚未指定正在使用的数据库。有些数据库进行整数除法,因此1/2=0而不是0.5。我调整了代码来解决这个问题。一个。。。工作表现。。非常感谢你