我正在尝试编写一个Postgres查询,它允许我查询users
表,以计算每个月创建的用户数量的变化,并按月对结果进行分组。users
表有一个created_at
列。
例如:假设应用程序于2022年12月上线,并且在12月期间创建了10个用户,那么12月的计数应该是10。如果在1月份创建了另外5个用户,则1月份的计数应为15(12月份的10个加上1月份的5个)。等等。
我想我有一种工作,但我想知道如果这是正确的方式来做它?特别是因为我应该能够将原始SQL转换为ActiveRecord查询。
select date_trunc('month', created_at) + interval '1 month' as month,
COUNT(*) OVER (ORDER BY date_trunc('month', created_at)) as historic_count
from users
1条答案
按热度按时间kyks70gy1#
你走对了。下面演示了一个返回所述结果的查询:
第一步是获取每月的创建次数。然后在顶层查询中计算这些计数的累积和。有一个隐式
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
帧定义与窗口化sum
聚合函数相关联。由于聚合的原因,如果不使用显式SQL,这是一个难以在ActiveRecord中实现的查询。