月ごとの新規ユーザーサインアップと累計

問題

レポート作成のため、登録ユーザー数を、有用な日付範囲間隔(ビン)にグループ化して把握する必要があります。

同じ日付ビンにおける総ユーザー数も知る必要があります。

解決策

以下のクエリは、共通テーブル式(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 のフォーマットを変更することで、日付ビンのサイズを簡単に変更できます。

このトピックには、テストして比較できる類似のものがあります。

「いいね!」 1

おお、いいですね!ありがとうございます。

検索したと思っていたのですが、どうやら十分ではなかったようです。

これで時間を節約できたのに… ため息

「いいね!」 2