Måske en enklere løsning for dig og forhindrer, at databasen skal udføre et væld af forespørgsler. Dette udfører kun én forespørgsel og laver derefter lidt matematik på resultaterne i et enkelt gennemløb.
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
Dette vil give dig en ekstra RT (løbende total) kolonne. Gå ikke glip af SET-sætningen øverst for at initialisere den kørende totalvariabel først, ellers får du bare en kolonne med NULL-værdier.