Maison >base de données >tutoriel mysql >Comment calculer la somme cumulée dans MySQL sans utiliser de fonctions analytiques ?
Somme cumulée dans MySQL sans SET
Dans MySQL, l'absence de fonctions analytiques telles que la somme cumulée présente un défi lorsque l'on tente de calculer des totaux cumulés . Cependant, il existe deux approches pour émuler cette fonctionnalité.
Sous-requêtes corrélées
Cette approche utilise une sous-requête dans la requête principale pour obtenir la somme cumulée. Cependant, cela peut être complexe et gourmand en ressources, en particulier lorsqu'il s'agit de jointures compliquées.
Variables utilisateur
Alternativement, les variables utilisateur de MySQL peuvent être exploitées pour effectuer une rupture de contrôle traitement. Cette méthode consiste à trier les résultats de la requête d'origine et à les envelopper dans une requête externe.
Dans la requête externe :
La logique suivante est appliqué :
Les variables utilisateur sont mises à jour avec les valeurs actuelles de l'identifiant et du jour après le calcul.
Exemple de requête
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, @cumtotal := 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
Si l'ordre des colonnes doit être modifié :
SELECT d.id, d.day, d.hr, d.amount, d.cumulative_total FROM ( // query from above ) d
Cette approche convient aux versions de MySQL antérieure à 8.0 et peut fournir une solution efficace pour calculer les sommes cumulées sur un ensemble de lignes.
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!