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

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

Barbara Streisand
Barbara Streisand原創
2025-01-12 17:39:44950瀏覽

How to Calculate Cumulative Sum in PostgreSQL Using Window Functions?

在PostgreSQL中計算累積和

PostgreSQL資料庫中,可以使用視窗函數從臨時表中計算欄位的累積和(或運行總和),並將結果轉移到目標表。視窗函數允許根據分區中的一系列行執行計算,在本例中,根據circle_id列建立的分區進行計算。

視窗函數語法

此處使用的視窗函數語法如下:

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

此視窗函數以circle_id列進行分區,這表示將為每個circle_id分別計算累積和。在每個分區內,行按ea_yearea_month列排序,這確保了為每個circle從最早到最晚的月份計算累積和。

範例查詢

根據提供的表格結構,以下查詢將產生所需的結果:

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

說明

該查詢從tbl表中提取相關列,併計算每個circle_id的累積和。 OVER子句指定視窗函數的分區和順序,確保為每個circle正確計算累積和。

重要說明

  • OVER子句中ORDER BY子句的順序對於獲得所需結果至關重要。
  • 如果表格中儲存的是日期值,可以直接在ORDER BY子句中使用它們。但是,如果使用的是月份的字串表示,則可能需要使用to_date()函數將其轉換為日期值。
  • 目標表中產生的cum_amt列將包含amount列的累積和,按circle_id分區,並按ea_yearea_month排序。

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

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