Vielleicht eine einfachere Lösung für Sie und verhindert, dass die Datenbank eine Menge Abfragen durchführen muss. Dadurch wird nur eine Abfrage ausgeführt und die Ergebnisse in einem einzigen Durchgang ein wenig berechnet.
SET @runtot:=0;
SELECT
q1.d,
q1.c,
(@runtot := @runtot + q1.c) AS rt
FROM
(SELECT
DAYOFYEAR(`date`) AS d,
COUNT(*) AS c
FROM `orders`
WHERE `hasPaid` > 0
GROUP BY d
ORDER BY d) AS q1
Dadurch erhalten Sie eine zusätzliche RT-Spalte (laufende Summe). Verpassen Sie nicht die SET-Anweisung oben, um zuerst die laufende Summenvariable zu initialisieren, sonst erhalten Sie nur eine Spalte mit NULL-Werten.