Neue Benutzeranmeldungen pro Monat mit laufender Summe

Problem

Für Berichtszwecke müssen wir wissen, wie viele Benutzer sich angemeldet haben, gruppiert in nützliche Datumsbereichsintervalle (Bins).

Wir müssen auch die Gesamtzahl der Benutzer in denselben Datums-Bins kennen.

Lösung

Die folgende Abfrage funktioniert, indem sie eine Common Table Expression (CTE) erstellt, in der die Spalte user.created_at in einen YEAR-MONTH-String und die Anzahl der Benutzer in diesem Monats-Bin umgewandelt wird.

Anschließend wird eine Fensteroperation (OVER) verwendet, um eine kumulative Summe der count zu generieren.

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

Die OVER-Anweisung habe ich von SO kopiert, daher habe ich keine Ahnung, ob all diese Optionen unbedingt erforderlich sind.

Es wäre einfach, die Größe der Datums-Bins zu ändern, indem man die Formatierung von yeardate ändert.

Wir haben einige ähnliche in diesem Thema, wenn Sie sie ausprobieren und sehen möchten, wie sie sich vergleichen lassen:

1 „Gefällt mir“

Oh, nett! Danke.

Ich dachte, ich hätte gesucht, offensichtlich nicht gut genug oder nicht mit genügend Geheimzutaten.

Das hätte mir etwas Zeit gespart … seufz

2 „Gefällt mir“