Maison >base de données >tutoriel mysql >Comment calculer la somme cumulée dans PostgreSQL à l'aide des fonctions de fenêtre ?

Comment calculer la somme cumulée dans PostgreSQL à l'aide des fonctions de fenêtre ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-12 17:39:44953parcourir

How to Calculate Cumulative Sum in PostgreSQL Using Window Functions?

Calculer la somme cumulée dans PostgreSQL

Dans la base de données PostgreSQL, vous pouvez utiliser des fonctions de fenêtre pour calculer la somme cumulée (ou somme cumulée) des champs de la table temporaire et transférer les résultats vers la table cible. Les fonctions de fenêtre permettent d'effectuer des calculs sur la base d'une série de lignes dans une partition, dans ce cas, une partition créée à partir de la colonne circle_id.

Syntaxe de la fonction fenêtre

La syntaxe de la fonction window utilisée ici est la suivante :

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

Cette fonction de fenêtre divise par circle_id colonne, ce qui signifie que la somme cumulée sera calculée séparément pour chaque circle_id. Au sein de chaque partition, les lignes sont triées selon les colonnes ea_year et ea_month, ce qui garantit que la somme cumulée est calculée pour chaque circle mois du plus tôt au plus tard.

Exemple de requête

En fonction de la structure de table fournie, la requête suivante générera les résultats requis :

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

Description

Cette requête extrait les colonnes pertinentes de la table tbl et calcule la somme cumulée pour chaque circle_id. La clause OVER spécifie le partitionnement et l'ordre des fonctions de fenêtre, garantissant que la somme cumulée est calculée correctement pour chaque circle.

Remarque importante

    L'ordre des clauses
  • dans la clause OVERORDER BY est essentiel pour obtenir le résultat souhaité.
  • Si la table stocke des valeurs de date, vous pouvez les utiliser directement dans la clause ORDER BY. Cependant, si vous utilisez une représentation sous forme de chaîne du mois, vous devrez peut-être utiliser la fonction to_date() pour la convertir en valeur de date.
  • La colonne cum_amt résultante dans la table cible contiendra la somme cumulée de la colonne amount, partitionnée par circle_id et triée par ea_year et ea_month.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn