Maison >base de données >tutoriel mysql >Comment générer efficacement une colonne de somme cumulée dans MySQL ?

Comment générer efficacement une colonne de somme cumulée dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-22 10:01:09452parcourir

How to Efficiently Generate a Cumulative Sum Column in MySQL?

Calcul des sommes cumulées dans MySQL : deux approches

Ce guide détaille deux méthodes efficaces pour générer des colonnes de somme cumulée dans les bases de données MySQL.

Méthode 1 : Utilisation de sous-requêtes corrélées

Cette approche utilise une sous-requête corrélée pour calculer la somme cumulée :

<code class="language-sql">SELECT t.id,
       t.count,
       (SELECT SUM(x.count)
          FROM TABLE x
         WHERE x.id <= t.id) AS cumulative_sum
FROM TABLE t
ORDER BY t.id;</code>

La sous-requête corrélée, intégrée dans la clause AS, calcule dynamiquement la somme cumulée pour chaque ligne. Il additionne les valeurs count depuis le début du tableau jusqu'à et y compris le id de la ligne actuelle.

Méthode 2 : exploiter les variables MySQL

Les variables MySQL offrent une méthode alternative pour les calculs de sommes cumulées :

<code class="language-sql">SELECT t.id,
       t.count,
       @running_total := @running_total + t.count AS cumulative_sum
FROM TABLE t
JOIN (SELECT @running_total := 0) r
ORDER BY t.id;</code>

Cette méthode initialise une variable MySQL, @running_total, à 0 à l'aide d'une jointure croisée. Au fur et à mesure que la requête parcourt chaque ligne de TABLE t, @running_total accumule les valeurs count, produisant la somme cumulée.

Considérations importantes :

  • L'utilisation des variables MySQL est spécifique à la base de données et peut ne pas être compatible avec d'autres systèmes de bases de données.
  • Les deux méthodes nécessitent une clause ORDER BY pour garantir un calcul précis de la somme cumulée. L'ordre des lignes dicte la séquence de sommation.

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