每月新用户注册及累计数

问题

为了报告目的,我们需要知道注册了多少用户,但这些用户需要分组到有用的日期范围间隔(分箱)中。

我们还需要知道同一日期分箱中的用户总数。

解决方案

以下查询通过创建一个通用表表达式(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 的格式,可以轻松更改日期分箱的大小。

如果您想尝试并比较,我们在此主题中还有一些类似的:

1 个赞

哦,太好了!谢谢。

我以为我搜索过了,显然搜索得不够好,或者“秘方”不够。

这样就能节省我一些时间了……叹气

2 个赞