问题
为了报告目的,我们需要知道注册了多少用户,但这些用户需要分组到有用的日期范围间隔(分箱)中。
我们还需要知道同一日期分箱中的用户总数。
解决方案
以下查询通过创建一个通用表表达式(CTE)来工作,其中 user.created_at 列被转换为 YEAR-MONTH 字符串,并计算该月份“分箱”中的用户数量。
然后使用窗口操作(OVER)生成 count 的累积总和。
WITH data as (
SELECT
TO_CHAR(u.created_at,'yyyy-MM') AS yeardate,
COUNT(*)
FROM users u
GROUP BY yeardate
ORDER BY yeardate
)
SELECT
yeardate,
count,
SUM(count::int) OVER (
order by yeardate asc rows between unbounded preceding and current row
) AS cumulative
FROM data
我从 Stack Overflow 复制了 OVER 的写法,所以不确定所有选项是否都严格必需。
通过更改 yeardate 的格式,可以轻松更改日期分箱的大小。