Maison >base de données >tutoriel mysql >Comment puis-je calculer les sommes cumulées dans PostgreSQL à l'aide des fonctions de fenêtre ?
Calculer la somme cumulée à l'aide de la fonction fenêtre dans PostgreSQL
Question :
Vous disposez d'une table intermédiaire qui contient des données financières et des sommes cumulées qui doivent être insérées dans la table cible. La structure de la table intermédiaire contient les colonnes suivantes :
ea_month
: mois id
: identifiant unique amount
: montant de la transactionea_year
: Année circle_id
: Cercles liés aux transactions Le tableau cible doit contenir une colonne supplémentaire cum_amt
qui reflète la somme cumulée des montants pour chaque ligne.
Solution :
Pour ce faire, vous pouvez utiliser la fonctionnalité de fonctions de fenêtre de PostgreSQL, qui vous permet d'effectuer des calculs sur une plage de lignes. Plus précisément, vous pouvez utiliser la clause OVER
pour appliquer une fonction d'agrégation dans une fenêtre définie (SUM
dans ce cas) :
<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>
Dans cette requête :
PARTITION BY circle_id
: Divisez les données en groupes basés sur circle_id
, en vous assurant que la somme cumulée est calculée séparément pour chaque cercle. ORDER BY ea_year, ea_month
: Spécifie l'ordre de tri au sein de chaque partition, garantissant que la somme cumulée est calculée par ordre chronologique. cum_amt
: L'expression agrégationSUM
calcule la somme cumulée de chaque ligne, en considérant toutes les lignes depuis le début de la partition jusqu'à la ligne actuelle. REMARQUE : Assurez-vous que vos paires de tables (circle_id
, ea_year
, ea_month
) ont des index uniques pour garantir un regroupement correct des calculs. Cela garantit que les lignes avec les mêmes circle_id
, ea_year
et ea_month
apparaissent toujours ensemble dans un ordre trié.
En utilisant la technique des fonctions de fenêtre, vous pouvez calculer efficacement la somme cumulée de chaque ligne et l'insérer dans la table cible.
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!