Maison >base de données >tutoriel mysql >Comment calculer un total cumulé de lignes par minute dans 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!