Inscriptions de nouveaux utilisateurs par mois avec total cumulé

Problème

À des fins de reporting, nous devons savoir combien d’utilisateurs se sont inscrits, mais regroupés en intervalles de dates utiles (intervalles).

Nous devons également connaître le nombre total d’utilisateurs dans les mêmes intervalles de dates.

Solution

La requête suivante fonctionne en créant une expression de table commune (CTE) où la colonne user.created_at est transformée en une chaîne ANNÉE-MOIS et en un décompte du nombre d’utilisateurs dans cet intervalle de mois.

Ensuite, une opération de fenêtre (OVER) est utilisée pour générer une somme cumulative du 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

L’incantation OVER a été copiée de SO, donc je n’ai aucune idée si toutes ces options sont strictement nécessaires.

Il serait facile de modifier la taille des intervalles de dates en modifiant le format de yeardate.

Nous avons des sujets similaires dans ce fil si vous souhaitez les tester et voir comment ils se comparent :

1 « J'aime »

Oh sympa ! Merci.

Je pensais avoir cherché, mais pas assez bien ou avec une sauce secrète insuffisante.

Cela m’aurait fait gagner du temps… soupir

2 « J'aime »