問題
レポート作成のため、登録ユーザー数を、有用な日付範囲間隔(ビン)にグループ化して把握する必要があります。
同じ日付ビンにおける総ユーザー数も知る必要があります。
解決策
以下のクエリは、共通テーブル式(CTE)を作成することで機能します。この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
OVER の呪文は SO からコピーしたので、すべてのオプションが厳密に必要なのかどうかはわかりません。
yeardate のフォーマットを変更することで、日付ビンのサイズを簡単に変更できます。