sql - 使用 postgres 和 chart.io 构建客户生命周期值(value)折线图

标签 sql postgresql charts

我需要构建一个客户生命周期值(value)图表,但一直纠结于如何在普通 psql 中执行此操作。

a mockup on what it is supposed to look like

因此,我们的想法是每天都有一条线,显示当天签约的客户在一段时间内花费的平均金额。

我的表格是这样的:

用户

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

“创建于”是指产生费用的时间

'Layer'指的是用户创建的时间

'avg_amount' 是在 'created_at' 注册的用户当天的平均费用 total_amount

谢谢:)

编辑:不幸的是,随着市场营销人员看到图表,规范发生了变化……他们现在希望 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

非常感谢

最佳答案

我相信您可以解决一些格式问题 (here's the 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;

关于sql - 使用 postgres 和 chart.io 构建客户生命周期值(value)折线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19962214/

相关文章:

sql - 如果更新值为空,则不更新列

postgresql - 来自 ST_Intersects(LINESTRING, POLYGON) 的意外结果

sql - 加快活跃用户查询

javascript - C3 js无法读取未定义的属性 'width'

excel - 如何在Excel中创建包含数据点的条形图?

SQL:根据转换表将 X 的所有值更新为 Y

sql - 根据一个 SQL 表中的数据更新另一表中的数据

sql - PostgreSQL trigram Indexes in characters < 3 行为

r - 更改气泡图中使用的大小范围

mysql - 通过 MySQL 中的 bool 值查找 JSON 对象路径