Mysql
 sql >> Base de données >  >> RDS >> Mysql

Créer une colonne de somme cumulée dans MySQL

Utilisation d'une requête corrélée :

  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

Utilisation des variables MySQL :

  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

Remarque :

  • Le JOIN (SELECT @running_total := 0) r est une jointure croisée et permet la déclaration de variables sans nécessiter un SET séparé commande.
  • L'alias de la table, r , est requis par MySQL pour toute sous-requête/table dérivée/vue en ligne

Mises en garde :

  • spécifique à MySQL ; non transférable vers d'autres bases de données
  • Le ORDER BY est important; il garantit que l'ordre correspond à l'OP et peut avoir des implications plus importantes pour une utilisation plus compliquée des variables (c'est-à-dire :fonctionnalité pseudo ROW_NUMBER/RANK, qui manque à MySQL)