sql >> Base de Datos >  >> RDS >> Mysql

Cálculo de Mysql en declaración de selección

En términos generales, SQL no tenía la intención de generar "totales acumulados" como usted desea. Otros RDBMS han introducido extensiones propietarias para brindar funciones analíticas que permiten cálculos de este tipo, pero MySQL carece de tales características.

En cambio, uno tiene en términos generales cuatro opciones. Sin ningún orden en particular:

  1. Acumule un total acumulado en su aplicación, mientras recorre el conjunto de resultados;

  2. Modifique su esquema para realizar un seguimiento de un total acumulado dentro de su base de datos (especialmente bueno en situaciones como esta, donde los datos nuevos solo se agregan "hasta el final");

  3. Agrupar una autounión:

    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. Acumule el total acumulado en una variable de usuario :

    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