Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Cálculo do MySQL na instrução select


De um modo geral, o SQL não foi realmente destinado a produzir "totais em execução" como você deseja. Outros RDBMS introduziram extensões proprietárias para fornecer funções analíticas que permitem cálculos desse tipo, mas o MySQL não possui esses recursos.

Em vez disso, tem-se amplamente quatro opções. Em nenhuma ordem particular:

  1. Acumule um total em execução em seu aplicativo, conforme você percorre o conjunto de resultados;

  2. Altere seu esquema para acompanhar um total em execução em seu banco de dados (especialmente bom em situações como essa, onde novos dados são anexados apenas "no final");

  3. Agrupe uma auto-junção:
    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 o total em execução em uma variável de usuário :
    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