0

我目前正在为我的一个客户工作一个统计程序,但我似乎无法弄清楚如何计算转化率。

表是这样的:

User_id     order_id    plan_id
12          12          16     
12          13          2
12          14          2
14          15          5
14          16          16
15          17          16

订单id16是试用版,其余的是付费的。所以你可以看到用户 15,只有一个试用版。所以他没有将免费转换为付费。

用户 12 和 14 都有试用版 (plan_id=16) 和付费套餐 (plan_id<>16),这意味着他从免费转换为付费。

所以我正在寻找一个计算转化率的方向指针。我正在寻找以下方向的查询(或输出我需要的数量):

Converted   Notconverted
1200        1800

这是给用户的。那么有多少用户为试用过的帐户付费。

我有这个查询;但我似乎无法对用户进行分组,因为它显然会返回更多行。

SELECT (SELECT COUNT(*) AS TotalOrders FROM orders where (plan_id<>17) GROUP BY user_id) AS SuccessCount, (SELECT COUNT(*) AS TotalFreeAccounts FROM orders where (plan_id=16) GROUP BY user_id) AS TrialCount


编辑:几乎在那里(:

到目前为止,我们遇到了以下查询,它似乎对转换后有效。但不适用于未皈依的人。作为一个小的调整,计划 17 也是一个试用版:

SELECT 
    count(Distinct TN2.user_id) as Converted,
    count(Distinct TN.user_id) as NotConverted
FROM orders TN
INNER JOIN orders TN2
 on TN.user_id  = TN2.user_id
 and (TN.plan_id = 16 OR TN.plan_id = 17)
 and (TN2.plan_id <> 16 AND TN2.plan_id<>17)

结果完全一样,但这是不可能的

两者都设置为相同的数字,这是可能的。我很确定这对于未转换的人来说是正确的。

提前感谢您的帮助。

4

1 回答 1

1

假设我理解这个问题:

使用自我加入来查找进行过试用(计划 16)的用户并加入到具有非试用计划(不是计划 16)的同一用户

使用 LEFT JOIN 是因为我们对那些从 TryOut 开始然后可能已成为非试用计划的人感兴趣。我们不关心那些没有试用的用户。

使用 Distinct 是因为我们不在乎计算中的非试用计划,只是任何计划。

所以在你的例子中:

User_id     order_id    plan_id
12          12          16     
12          13          2
12          14          2
14          15          5
14          16          16
15          17          16

以下查询的结果应该产生(假设逻辑和语法是正确的)

CONVERTED  NOTCONVERTED
2          1

用户 15 有一个试用计划,但没有其他人,因此没有转换。用户 12 有一个试用计划和多次非试用,因此只计入一次。用户 14 有一个试用计划和一个其他计划,因此计入一次。

SELECT count(Distinct TN2.user_ID) as Converted, 
       count(Distinct TN.User_ID) as NotConverted   
FROM tableName TN
LEFT JOIN TableName TN2
 on TN.User_ID  = TN2.user_ID
 and TN.Plan_ID = 16
 and TN2.Plan_ID <> 16
于 2014-03-28T16:49:47.863 回答