Peut-être une solution plus simple pour vous et qui évite à la base de données de faire une tonne de requêtes. Cela exécute une seule requête, puis effectue un petit calcul sur les résultats en une seule passe.
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
Cela vous donnera une colonne RT (total cumulé) supplémentaire. Ne manquez pas l'instruction SET en haut pour initialiser d'abord la variable de total cumulé ou vous obtiendrez simplement une colonne de valeurs NULL.