0

現在、クライアントの 1 人のために統計プログラムを作成していますが、コンバージョン率を計算する方法がわかりません。

テーブルは次のようになります。

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 で開始された後、非 tryoutplan になった可能性があるものに関心があるため使用されます。トライアウトしていないユーザーは気にしませんでした。

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 にはトライアウト プランがあり、複数の非トライアウトがあったため、1 回だけカウントされます。ユーザー 14 は、試用プランと別の 1 つのプランを持っていたため、1 回カウントされます。

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 に答える