Over het algemeen was SQL niet echt bedoeld om "lopende totalen" op te leveren zoals u wenst. Andere RDBMS hebben eigen extensies geïntroduceerd om analytische functies te leveren die dit soort berekeningen mogelijk maken, maar MySQL mist dergelijke functies.
In plaats daarvan heeft men grofweg vier opties. In willekeurige volgorde:
-
Verzamel een lopend totaal in uw toepassing, terwijl u de resultatenset doorloopt;
-
Wijzig uw schema om een lopend totaal in uw database bij te houden (vooral handig in situaties als deze, waar nieuwe gegevens alleen "tot het einde" worden toegevoegd);
-
Een self-join groeperen:
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
-
Verzamel het lopende totaal in een gebruikersvariabele :
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