Kanske en enklare lösning för dig och förhindrar att databasen behöver göra massor av frågor. Detta exekverar bara en fråga och räknar sedan ut resultaten i ett enda pass.
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
Detta ger dig en extra RT-kolumn (running total). Missa inte SET-satsen högst upp för att initialisera den löpande totalvariabeln först, annars får du bara en kolumn med NULL-värden.