Heim > Datenbank > MySQL-Tutorial > Wie kann ich die Anzahl laufender Zeilen pro Minute in PostgreSQL effizient berechnen?

Wie kann ich die Anzahl laufender Zeilen pro Minute in PostgreSQL effizient berechnen?

Patricia Arquette
Freigeben: 2025-01-19 00:46:10
Original
684 Leute haben es durchsucht

How to Efficiently Calculate Running Row Counts per Minute in PostgreSQL?

Effiziente Berechnungsmethode der Zeilenanzahl pro Minute in PostgreSQL

Zeilenanzahl abrufen

<code class="language-sql">SELECT COUNT(id) AS count,
       EXTRACT(hour FROM "when") AS hour,
       EXTRACT(minute FROM "when") AS minute
FROM mytable
GROUP BY hour, minute;</code>
Nach dem Login kopieren

Diese Abfrage zählt Zeilen pro Minute, liefert jedoch keine laufende Summe.

Laufende Zählung durchführen

Methode 1: Nur Minuten mit Aktivitätsaufzeichnungen zurückgeben

<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>
Nach dem Login kopieren

Diese Abfrage verwendet die Funktion date_trunc(), um die Zeilenanzahl für jede aktive Minute zurückzugeben. Es berechnet die Gesamtzahl der Läufe mithilfe einer Fensterfunktion mit einer ORDER BY-Klausel.

Enthält Minuten ohne Aktivität

Methode 2: Unterabfrage mit Join verwenden

<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>
Nach dem Login kopieren

Diese Methode aggregiert die Zeilenanzahl pro Minute in einer Unterabfrage. Anschließend wird die Hauptabfrage damit verknüpft, um die Anzahl zu akkumulieren und Minuten ohne Aktivität einzubeziehen.

Methode 3: Verwenden Sie CTE (am schnellsten)

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

Diese Methode kombiniert CTE, Unterabfrage und Left Join. Dies ist ein effizienter Ansatz für große Datensätze mit „Wann“-Indizes.

Das obige ist der detaillierte Inhalt vonWie kann ich die Anzahl laufender Zeilen pro Minute in PostgreSQL effizient berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage