Maison >base de données >tutoriel mysql >Comment calculer la somme cumulée dans MySQL sans fonctions analytiques ?

Comment calculer la somme cumulée dans MySQL sans fonctions analytiques ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-03 15:51:43758parcourir

How to Calculate Cumulative Sum in MySQL Without Analytic Functions?

Calcul de la somme cumulée pour un ensemble de lignes dans MySQL

Énoncé du problème :

Déterminer la somme cumulée pour chaque ID pour toutes les heures de la journée à partir d'un ensemble de résultats de requête contenant des colonnes pour l'ID, le jour, l'heure et montant.

Réponse :

SELECT IF(@prev_id = c.id AND @prev_day = c.day
         ,@cumtotal := @cumtotal + c.amount
         ,@cumtotal := c.amount) AS cumulative_total
     , @prev_id  := c.id  AS `id`
     , @prev_day := c.day AS `day`
     , c.hr
     , c.amount AS `amount'
  FROM ( SELECT @prev_id  := NULL
              , @prev_day := NULL
              , @subtotal := 0
       ) i
  JOIN (

         select id, day, hr, amount from
         ( //multiple joins on multiple tables)a
         left join
         (//unions on multiple tables)b
         on a.id=b.id

         ORDER BY 1,2,3
       ) c

Remarques supplémentaires :

  • Les versions MySQL antérieures à 8.0 manquent d'analyse fonctions pour le calcul de la somme cumulée.
  • La solution fournie utilise les variables utilisateur MySQL et le traitement des ruptures de contrôle pour émuler la fonctionnalité analytique.
  • La requête a été modifiée pour classer les lignes par ID, jour et heure pour un calcul correct de la somme cumulée.
  • La colonne du total cumulé calculé est renvoyée en tant que première colonne du ensemble de résultats.

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