Maison > Questions et réponses > le corps du texte
P粉2452767692023-08-23 09:47:13
SELECT t.id, t.count, (SELECT SUM(x.count) FROM TABLE x WHERE x.id <= t.id) AS cumulative_sum FROM TABLE t ORDER BY t.id
SELECT t.id, t.count, @running_total := @running_total + t.count AS cumulative_sum FROM TABLE t JOIN (SELECT @running_total := 0) r ORDER BY t.id
Remarque :
JOIN (SELECT @running_total := 0) r
是一个交叉连接,允许在不需要单独的SET
Déclarez les variables dans le contexte des commandes. r
Remarques :
ORDER BY
Très important, cela garantit que l'ordre correspond à la question d'origine, et peut avoir un impact plus important pour une utilisation de variables plus complexe (par exemple : fonctionnalité pseudo ROW_NUMBER/RANK, non prise en charge par MySQL) P粉0065406002023-08-23 00:13:27
Si les performances posent problème, vous pouvez utiliser des variables MySQL :
set @csum := 0; update YourTable set cumulative_sum = (@csum := @csum + count) order by id;
Vous pouvez également supprimer la colonne cumulative_sum
et la calculer dans chaque requête :
set @csum := 0; select id, count, (@csum := @csum + count) as cumulative_sum from YourTable order by id;
Cela calcule la somme cumulée de manière continue :)