Talvez uma solução mais simples para você e evite que o banco de dados tenha que fazer muitas consultas. Isso executa apenas uma consulta e faz um pouco de matemática nos resultados em uma única passagem.
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
Isso lhe dará uma coluna RT adicional (total em execução). Não perca a instrução SET na parte superior para inicializar a variável total em execução primeiro ou você obterá apenas uma coluna de valores NULL.