Heim >Datenbank >MySQL-Tutorial >Wie berechnet man in PostgreSQL eine laufende Zeilenanzahl pro Minute?

Wie berechnet man in PostgreSQL eine laufende Zeilenanzahl pro Minute?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-19 00:57:10335Durchsuche

How to Calculate a Running Row Count by Minute in PostgreSQL?

PostgreSQL: Anzahl der Abfrageergebniszeilen pro Minute zählen

In diesem Artikel wird beschrieben, wie Sie Fensterfunktionen in PostgreSQL verwenden, um die Anzahl der laufenden Zeilen von Abfrageergebnissen pro Minute zu berechnen.

1. Anzahl der Zeilen pro Minute

Die folgende Abfrage gibt die Anzahl der Zeilen pro Minute zurück:

<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>

2. Kumulierte Anzahl von Zeilen pro Minute

Um die kumulative Anzahl von Zeilen pro Minute zu berechnen, können Sie die folgende Abfrage verwenden:

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

Anleitung:

  • date_trunc('minute', "when")Kürzung der Zeitstempelspalte „wann“ auf die nächste Minute.
  • COUNT(*) OVER (ORDER BY date_trunc('minute', "when")) Zählt die Anzahl der pro Minute ausgeführten Zeilen. Die ORDER BY-Klausel gibt die Reihenfolge der aggregierten Zeilen an.
  • DISTINCT wird verwendet, um sicherzustellen, dass nur eindeutige Minuten zurückgegeben werden. Dies liegt daran, dass die Aggregatfunktion COUNT mehrere Zeilen für dieselbe Minute zurückgibt.

3. Einschließlich Minuten ohne Aktivität

Wenn Sie Minuten ohne Aktivität in die Ergebnisse einbeziehen möchten, können Sie die folgende Abfrage verwenden:

<code class="language-sql">SELECT
  m.minute,
  COALESCE(SUM(c.minute_count) OVER (ORDER BY m.minute), 0) AS running_count
FROM
  (
    SELECT
      generate_series(MIN(minute), MAX(minute), INTERVAL '1 minute') AS minute
    FROM
      (
        SELECT
          date_trunc('minute', "when") AS minute,
          COUNT(*) AS minute_count
        FROM
          mytable
        GROUP BY
          minute
      ) AS sub
  ) AS m
LEFT JOIN
  (
    SELECT
      date_trunc('minute', "when") AS minute,
      COUNT(*) AS minute_count
    FROM
      mytable
    GROUP BY
      minute
  ) AS c
ON
  m.minute = c.minute
ORDER BY
  m.minute;</code>

Anleitung:

  • Diese Abfrage verwendet LEFT JOIN, um Minuten ohne Aktivität einzubeziehen.
  • generate_series() Die Funktion generiert einen Minutenbereich zwischen den minimalen und maximalen Minuten in der Tabelle.
  • Die Funktion
  • COALESCE() stellt sicher, dass Minuten ohne Aktivität den laufenden Zählerstand 0 haben.

Das obige ist der detaillierte Inhalt vonWie berechnet man in PostgreSQL eine laufende Zeilenanzahl pro Minute?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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