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
Libérer: 2025-01-03 15:51:43
original
796 Les gens l'ont consulté

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

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 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal