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

Calcul MySQL dans l'instruction select

D'une manière générale, SQL n'était pas vraiment destiné à produire des "totaux cumulés" comme vous le souhaitez. D'autres RDBMS ont introduit des extensions propriétaires pour fournir des fonctions analytiques permettant des calculs de ce type, mais MySQL ne dispose pas de telles fonctionnalités.

Au lieu de cela, on a globalement quatre options. Sans ordre particulier :

  1. Accumulez un total cumulé dans votre application, lorsque vous parcourez le jeu de résultats ;

  2. Modifiez votre schéma pour garder une trace d'un total cumulé dans votre base de données (particulièrement utile dans des situations comme celle-ci, où les nouvelles données ne sont jamais ajoutées "à la fin");

  3. Regrouper une auto-jointure :

    SELECT   a.Sale_Date,
             SUM(a.Stock_Delivered)                AS Stock_Delivered,
             SUM(a.Units_Sold)                     AS Units_Sold,
             SUM(b.Stock_Delivered - b.Units_Sold) AS `Stock Balance`
    FROM     sales_report a
        JOIN sales_report b ON b.Sale_Date <= a.Sale_Date
    GROUP BY a.Sale_Date
    
  4. Cumulez le total cumulé dans une variable utilisateur :

    SELECT   Sale_Date,
             Stock_Delivered,
             Units_Sold,
             @t := @t + Stock_Delivered - Units_Sold AS `Stock Balance`
    FROM     sales_report, (SELECT @t:=0) init
    ORDER BY Sale_Date