Maison >base de données >tutoriel mysql >Comment calculer un total cumulé de lignes par minute dans PostgreSQL ?

Comment calculer un total cumulé de lignes par minute dans PostgreSQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-19 00:52:09624parcourir

How to Calculate a Running Total of Rows per Minute in PostgreSQL?

PostgreSQL : total cumulé du nombre de lignes de requête par minute

Aperçu du problème

Vous devez récupérer le nombre total de lignes par minute jusqu'à cette heure spécifique.

La meilleure façon de calculer les totaux

<code class="language-sql">SELECT DISTINCT date_trunc('minute', "when") AS minute,
       count(*) OVER (ORDER BY date_trunc('minute', "when")) AS running_ct
FROM   mytable
ORDER  BY 1;</code>

Cette requête utilise la fonction date_trunc() pour extraire uniquement la partie minutes du champ « quand ». La fonction count() agrégée sur cette composante minute tronquée en tant que fonction de fenêtre fournit le total cumulé.

Le moyen le plus rapide

<code class="language-sql">SELECT minute, sum(minute_ct) OVER (ORDER BY minute) AS running_ct
FROM  (
   SELECT date_trunc('minute', "when") AS minute,
          count(*) AS minute_ct
   FROM   tbl
   GROUP  BY 1
   ) sub
ORDER  BY 1;</code>

Cette requête est regroupée en sous-requêtes pour calculer le nombre de lignes par minute. Il effectue ensuite une somme cumulée à l’aide d’une fonction de fenêtre.

Gérer les minutes d'inactivité

Pour que chaque minute soit comptée, même celles sans activité :

<code class="language-sql">SELECT m.minute,
       COALESCE(sum(c.minute_ct) OVER (ORDER BY m.minute), 0) AS running_ct
FROM  (
   SELECT generate_series(date_trunc('minute', min("when")),
                          max("when"),
                          interval '1 min')
   FROM   tbl
   ) m(minute)
LEFT   JOIN (
   SELECT date_trunc('minute', "when") AS minute,
          count(*) AS minute_ct
   FROM   tbl
   GROUP  BY 1
   ) c USING (minute)
ORDER  BY 1;</code>

Cette requête utilise generate_series() pour créer une ligne pour chaque minute de la plage et LEFT JOIN pour compter et résumer les lignes de la table de base.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn