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.