Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Berechnung in Select-Anweisung

Im Allgemeinen war SQL nicht wirklich dazu gedacht, "laufende Summen" zu liefern, wie Sie es wünschen. Andere RDBMS haben proprietäre Erweiterungen eingeführt, um Analysefunktionen bereitzustellen, die Berechnungen dieser Art ermöglichen, aber MySQL fehlen solche Funktionen.

Stattdessen hat man im Großen und Ganzen vier Optionen. In keiner bestimmten Reihenfolge:

  1. Akkumulieren Sie eine laufende Summe in Ihrer Anwendung, während Sie die Ergebnismenge durchlaufen;

  2. Ändern Sie Ihr Schema, um eine laufende Summe in Ihrer Datenbank zu verfolgen (besonders gut in Situationen wie dieser, wo neue Daten immer nur "bis zum Ende" angehängt werden);

  3. Gruppieren Sie einen Selbstbeitritt:

    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. Akkumulieren Sie die laufende Summe in einer Benutzervariable :

    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