首頁 >資料庫 >mysql教程 >如何使用視窗函數計算 PostgreSQL 中的累積和?

如何使用視窗函數計算 PostgreSQL 中的累積和?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-12 17:23:45195瀏覽

How Can I Calculate Cumulative Sums in PostgreSQL Using Window Functions?

在PostgreSQL中使用視窗函數計算累計和

問題:

您有一個暫存表,其中包含需要插入目標表的財務資料和累計和。暫存表結構包含以下列:

  • ea_month:月份
  • id:唯一識別碼
  • amount:交易金額
  • ea_year:年份
  • circle_id:與交易相關的圈子

目標表應包含一個額外的欄位cum_amt,該列反映每行的金額的累積和。

解:

為此,您可以使用PostgreSQL的視窗函數功能,該功能可讓您對一定範圍的行執行計算。具體來說,您可以使用OVER子句在定義的視窗內套用聚合函數(在本例中為SUM):

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

在此查詢中:

  • PARTITION BY circle_id依據circle_id將資料分成群組,確保每個圈子分別計算累積和。
  • ORDER BY ea_year, ea_month指定每個分區內的排序順序,確保按時間順序計算累積和。
  • cum_amt聚合SUM表達式計算每行的累積和,考慮從分區開始到目前行的所有行。

注意:確保您的表對(circle_idea_yearea_month)具有唯一索引,以確保計算的正確分組。這確保了具有相同circle_idea_yearea_month的行始終按排序順序一起出現。

透過使用視窗函數技術,您可以有效地計算每行的累積和並將其插入目標表。

以上是如何使用視窗函數計算 PostgreSQL 中的累積和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn