使用Postgresql计算用户流失

时间:2016-05-16 11:42:14

标签: sql postgresql join metrics

我正在尝试使用this tutorial之后的PostgreSQL 9.5.2实现计算用户保留和流失的查询

我有一个事件表定义为:

with monthly_activity as (
  select distinct 
    date_trunc('month', "createdAt") as month, 
    "userId"
  from messages
)
select 
  this_month.month, 
  count(distinct this_month."userId")
from monthly_activity last_month
left join monthly_activity this_month
  on this_month."userId" = last_month."userId"
  and this_month.month = last_month.month + interval '1 month'
where this_month."userId" is null
group by 1

计算保留的用户工作得很好,但我在运行此查询时遇到计算“userId”的问题:

def search_for_files(patterns, path):
    return [os.path.join(path, name)
        for name in os.listdir(path)
            if any(pattern in name for pattern in patterns)
    ]

表正在正确连接,但计算空值似乎没有返回任何结果。

有关如何使其发挥作用的任何提示?

谢谢!

1 个答案:

答案 0 :(得分:1)

COUNT函数忽略空值。您的where子句设置为专门确保this_month."userId"始终为null。

将您的查询更改为count(distinct last_month."userId")

COUNT doc:http://www.postgresql.org/docs/current/static/functions-aggregate.html