sql - 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;
我是数据库查询的新手,不确定是否应该使用联接或子查询。请帮忙!
解决方案
我认为你想要条件聚合,在 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;
推荐阅读
- mysql - 运行优化命令时,它会重建表,那么数据库中需要多少额外空间?
- html - 如何使边框和 z-index 保持到过渡结束?
- c# - 循环故障时,随机积分器仅在第一次工作
- javascript - MSIToken 中的 Azure 日期解析问题
- ios - 关于如何在与 CloudKit 同步的 Core Data 中存储 mp3 和图像文件的建议
- php - 如何在 WooCommerce 4+ 中为产品添加自定义库存状态
- python - 使用 while 循环获取 Panda DataFrame 中的列值
- sapui5 - 使用 HBox 容器和继承但自定义的事件扩展控制
- javascript - Nuxt 2.x:添加 babel 的转换插件,适用于导入的 node_module 文件
- hazelcast - 集群 Vert.x 服务时,集群的 EventBus 处理程序是否会传播到新的加入节点?