Forse una soluzione più semplice per te e impedisce al database di dover eseguire un sacco di query. Questo esegue solo una query, quindi fa un po' di calcoli sui risultati in un unico passaggio.
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
Questo ti darà un'ulteriore colonna RT (totale corrente). Non perdere l'istruzione SET in alto per inizializzare prima la variabile del totale parziale o otterrai semplicemente una colonna di valori NULL.