Mysql
 sql >> Database >  >> RDS >> Mysql

Calcolo MySQL nell'istruzione select

In generale, SQL non era realmente destinato a produrre "totali correnti" come desideri. Altri RDBMS hanno introdotto estensioni proprietarie per fornire funzioni analitiche che consentono calcoli di questo tipo, ma MySQL non dispone di tali funzionalità.

Invece, uno ha sostanzialmente quattro opzioni. In nessun ordine particolare:

  1. Accumula un totale parziale nella tua applicazione, mentre esegui il ciclo sul set di risultati;

  2. Modifica il tuo schema per tenere traccia di un totale parziale all'interno del tuo database (particolarmente utile in situazioni come questa, in cui i nuovi dati vengono aggiunti solo "fino alla fine");

  3. Raggruppa un self-join:

    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. Accumula il totale parziale in una variabile utente :

    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