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

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

DDD
Libérer: 2025-01-12 17:20:44
original
981 Les gens l'ont consulté

How to Efficiently Calculate Cumulative Sum in PostgreSQL Using Window Functions?

Calculer la somme cumulée dans PostgreSQL

Utilisez les fonctions de fenêtre dans PostgreSQL pour calculer efficacement la somme cumulée des champs afin de mettre à jour les données de la table intermédiaire vers la table cible. Le problème posé nécessite de trouver le montant cumulé du champ « montant » en fonction de « circle_id » tout en conservant les autres attributs.

Pour ce faire, suivez ces étapes :

  1. Partitionnez les données : Utilisez la clause PARTITION BY pour créer des partitions basées sur "circle_id". Cela garantit que chaque cercle est calculé individuellement.
  2. Ordrez les données : Spécifiez une clause ORDER BY pour trier les lignes en fonction de "ea_year" et "ea_month" (ou de la colonne dérivée "the_date"). Ceci détermine l'ordre dans lequel la somme cumulée est calculée.
  3. Calculez la somme cumulée : Appliquez la fonction d'agrégation SUM() à l'aide de la clause OVER. Cela calculera la somme cumulée du champ « montant » au sein de chaque partition et pour les lignes précédant la ligne actuelle.

Requête générée :

<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>
Copier après la connexion

Cette requête générera la table cible requise où le montant cumulé ("cum_amt") est calculé pour chaque ligne selon l'ordre de tri spécifié.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal