在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_year
和ea_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_year
和ea_month
排序。 以上是如何使用視窗函數計算 PostgreSQL 中的累積和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!