ホームページ >データベース >mysql チュートリアル >PostgreSQL でウィンドウ関数を使用して累積合計を計算するにはどうすればよいですか?

PostgreSQL でウィンドウ関数を使用して累積合計を計算するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-12 17:23:45159ブラウズ

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
  • : aggregationcum_amt 式は、パーティションの先頭から現在の行までのすべての行を考慮して、各行の累積合計を計算します。 SUM
注:

計算の正しいグループ化を保証するために、テーブルのペア (circle_id) に一意のインデックスがあることを確認してください。これにより、同じ ea_yearea_monthcircle_id を持つ行が常にソート順に一緒に表示されるようになります。 ea_year ea_monthウィンドウ関数手法を使用すると、各行の累積和を効率的に計算し、対象のテーブルに挿入できます。

以上がPostgreSQL でウィンドウ関数を使用して累積合計を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。