首页 > 解决方案 > Postgres:获取每周试用和付费订阅的用户数量

问题描述

我知道标题没有帮助,对此感到抱歉。我迷路了,因为我不知道我在寻找什么过滤数据。

这是我的订阅模式

id user_id type sub_type created_at
1 1 A trial August 1, 2021, 12:00 AM
2 2 A trial August 8, 2021, 12:00 AM
3 3 A trial August 8, 2021, 12:00 AM
4 1 A paid August 8, 2021, 12:00 AM
5 2 A paid August 8, 2021, 12:00 AM

我想知道每周有多少用户试用以及其中有多少付费订阅。有点像这样

week      trial paid
August 1   1     1
August 8   2     1

我通过这个查询得到了每周试用

SELECT date_trunc('week', created_at::date) AS weekly,
       COUNT(user_id)
FROM subscription
WHERE sub_type = 'trial'
GROUP BY weekly
ORDER BY weekly;

我是数据库查询的新手,不确定是否应该使用联接或子查询。请帮忙!

标签: sqlpostgresql

解决方案


我认为你想要条件聚合,在 Postgres 中最好使用filter

SELECT date_trunc('week', created_at::date) AS weekly,
       COUNT(*) FILTER (WHERE sub_type = 'trial') as num_trials,
       COUNT(*) FILTER (WHERE sub_type = 'paid') as num_paid
FROM subscription
GROUP BY weekly
ORDER BY weekly;

推荐阅读