Heim >Datenbank >MySQL-Tutorial >Wie berechnet man eine laufende Summe der Zeilen pro Minute in PostgreSQL?
PostgreSQL: Laufende Gesamtzahl der Abfragezeilen pro Minute
Problemübersicht
Sie müssen die Gesamtzahl der Zeilen pro Minute bis zu diesem bestimmten Zeitpunkt abrufen.
Der beste Weg, Gesamtsummen zu berechnen
<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>
Diese Abfrage verwendet die Funktion date_trunc()
, um nur den Minutenteil des „Wann“-Felds zu extrahieren. Die über diese abgeschnittene Minutenkomponente als Fensterfunktion aggregierte Funktion count()
liefert die laufende Summe.
Der schnellste Weg
<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>
Diese Abfrage wird in Unterabfragen zusammengefasst, um die Anzahl der Zeilen pro Minute zu berechnen. Anschließend wird mithilfe einer Fensterfunktion eine laufende Summe berechnet.
Verwalten Sie Minuten der Inaktivität
Damit jede Minute gezählt wird, auch ohne Aktivität:
<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>
Diese Abfrage verwendet generate_series()
, um für jede Minute im Bereich eine Zeile zu erstellen, und LEFT JOIN
, um die Zeilen in der Basistabelle zu zählen und zusammenzufassen.
Das obige ist der detaillierte Inhalt vonWie berechnet man eine laufende Summe der Zeilen pro Minute in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!