Heim >Datenbank >MySQL-Tutorial >Wie berechnet man die kumulative Summe in PostgreSQL mithilfe von Fensterfunktionen effizient?

Wie berechnet man die kumulative Summe in PostgreSQL mithilfe von Fensterfunktionen effizient?

DDD
DDDOriginal
2025-01-12 17:20:44941Durchsuche

How to Efficiently Calculate Cumulative Sum in PostgreSQL Using Window Functions?

Kumulative Summe in PostgreSQL berechnen

Verwenden Sie Fensterfunktionen in PostgreSQL, um die kumulative Summe der Felder effizient zu berechnen, um Daten von der Staging-Tabelle in die Zieltabelle zu aktualisieren. Das gegebene Problem erfordert das Ermitteln der kumulativen Menge des Felds „amount“ basierend auf „circle_id“ unter Beibehaltung anderer Attribute.

Befolgen Sie dazu die folgenden Schritte:

  1. Partitionieren Sie die Daten: Verwenden Sie die PARTITION BY-Klausel, um Partitionen basierend auf „circle_id“ zu erstellen. Dadurch wird sichergestellt, dass jeder Kreis einzeln berechnet wird.
  2. Ordnen Sie die Daten: Geben Sie eine ORDER BY-Klausel an, um die Zeilen basierend auf „ea_year“ und „ea_month“ (oder der abgeleiteten Spalte „the_date“) zu sortieren. Dies bestimmt die Reihenfolge, in der die kumulative Summe berechnet wird.
  3. Berechnen Sie die kumulative Summe: Wenden Sie die Aggregatfunktion SUM() mit der OVER-Klausel an. Dadurch wird die kumulative Summe des Felds „Betrag“ innerhalb jeder Partition und für die Zeilen vor der aktuellen Zeile berechnet.

Generierte Abfrage:

<code class="language-sql">SELECT ea_month, id, amount, ea_year, circle_id,
     sum(amount) OVER (PARTITION BY circle_id ORDER BY ea_year, ea_month) AS cum_amt
FROM tbl
ORDER BY circle_id, ea_year, ea_month;</code>

Diese Abfrage generiert die erforderliche Zieltabelle, in der der kumulierte Betrag („cum_amt“) für jede Zeile gemäß der angegebenen Sortierreihenfolge berechnet wird.

Das obige ist der detaillierte Inhalt vonWie berechnet man die kumulative Summe in PostgreSQL mithilfe von Fensterfunktionen effizient?. 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