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
Libérer: 2025-01-19 00:52:09
original
623 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal