1

顧客の生涯価値チャートを作成する必要があり、単純な psql でこれを行う方法に行き詰まりました。

どのように見えるかのモックアップ

したがって、その日にサインオンした顧客が時間の経過とともに費やした平均金額を示す、各日の行を作成するという考え方です。

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

ユーザー

id | created_at
1  | 2013-11-01
2  | 2013-11-02
3  | 2013-11-03
4  | 2013-11-03

料金

id | created_at | total_amount | user_id
1  | 2013-11-01 | 49.00        | 1
2  | 2013-11-01 | 22.00        | 1
3  | 2013-11-04 | 10.00        | 1
4  | 2013-11-02 | 49.00        | 2
5  | 2013-11-03 | 66.00        | 3
6  | 2013-11-03 | 49.00        | 4
7  | 2013-11-06 | 14.00        | 4
8  | 2013-11-12 | 33.00        | 4

chart.io を使用して、これを折れ線グラフとしてレンダリングする必要があります。したがって、結果テーブルは次のようになります。

created_at | Layer      | avg_amount
2013-11-01 | 2013-11-01 | 35.50
2013-11-04 | 2013-11-01 | 10.00
2013-11-02 | 2013-11-02 | 49.00
2013-11-03 | 2013-11-03 | 57.50
2013-11-06 | 2013-11-03 | 14.00
2013-11-12 | 2013-11-03 | 33.00

「作成時」とは、請求が行われた時期を指します。

「レイヤー」は、ユーザーがいつ作成されたかを示します

「avg_amount」は、「created_at」にサインアップしたユーザーのその日の平均合計料金です。

ありがとう :)

編集: 残念ながら、マーケティング担当者がグラフを見たときに仕様が変更されました...彼らは現在、Y 軸が決して落ちないようにしたいと考えています。[コホート ユーザーからこれまでに作成された収益の累計]/[コホート内のすべてのユーザー] である必要があります。したがって、分母は増加できますが、分母は決して減少しません。

したがって、結果のテーブルは次のようになります。

created_at | Layer      | cumulative_amount
2013-11-01 | 2013-11-01 | 71.00
2013-11-02 | 2013-11-02 | 49.00
2013-11-03 | 2013-11-03 | 66.00
2013-11-03 | 2013-11-03 | 49.00
2013-11-04 | 2013-11-01 | 81.00
2013-11-06 | 2013-11-03 | 63.00
2013-11-12 | 2013-11-03 | 96.00

本当にありがとう

4

1 に答える 1

1

解決できると確信しているフォーマットの問題がいくつかありますが (ここに SQLFiddleがあります)、必要な基本的なクエリは次のとおりです。

WITH daily_charges AS (
  SELECT
    sum(total_amount) AS daily_total,
    user_id,
    date_trunc('day', created_at) AS charge_date
  FROM charges
  GROUP BY user_id, created_at
  )
SELECT
  d.charge_date,
  date_trunc('day', u.created_at) AS layer,
  avg(d.daily_total) AS avg_amount
FROM
  daily_charges d
  JOIN users u ON
    (d.user_id=u.id)
GROUP BY charge_date, layer;
于 2013-11-13T20:08:51.113 に答える