在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_id
,ea_year
,ea_month
)具有唯一索引,以確保計算的正確分組。這確保了具有相同circle_id
,ea_year
和ea_month
的行始終按排序順序一起出現。
透過使用視窗函數技術,您可以有效地計算每行的累積和並將其插入目標表。
以上是如何使用視窗函數計算 PostgreSQL 中的累積和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!