Може би е по-просто решение за вас и не позволява на базата данни да прави много заявки. Това изпълнява само една заявка, след което прави малко математика за резултатите с едно преминаване.
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
Това ще ви даде допълнителна колона RT (течащ общ брой). Не пропускайте оператора SET в горната част, за да инициализирате първо текущата обща променлива или просто ще получите колона с NULL стойности.