Quizás una solución más simple para usted y evita que la base de datos tenga que hacer un montón de consultas. Esto ejecuta solo una consulta y luego hace un poco de matemática sobre los resultados en un solo paso.
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
Esto le dará una columna RT (total acumulado) adicional. No se pierda la declaración SET en la parte superior para inicializar primero la variable total acumulada o simplemente obtendrá una columna de valores NULL.