Wellicht een eenvoudigere oplossing voor u en voorkomt dat de database een hoop queries moet doen. Dit voert slechts één query uit en doet vervolgens een beetje wiskunde op de resultaten in één keer.
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
Dit geeft je een extra RT-kolom (lopend totaal). Mis de SET-instructie bovenaan niet om de lopende totale variabele eerst te initialiseren, anders krijgt u gewoon een kolom met NULL-waarden.