Créer une colonne pour la somme cumulée dans MySQL
P粉670838735
P粉670838735 2023-08-22 11:26:08
0
2
485
<p>J'ai un tableau qui ressemble à ceci :</p> <pre class="brush:php;toolbar:false;">nombre d'identifiants 1100 2 50 310≪/pré> <p>Je souhaite ajouter une nouvelle colonne appelée cumulative_sum, donc le tableau ressemble à ceci : </p> <pre class="brush:php;toolbar:false;">id count cumulative_sum 1 100 100 2 50 150 310 160≪/pré> <p>Existe-t-il une instruction de mise à jour MySQL permettant d'y parvenir facilement ? Quelle est la meilleure approche ? </p>
P粉670838735
P粉670838735

répondre à tous(2)
P粉245276769

Utilisez des requêtes associées :


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

Utilisez des variables MySQL :


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是一个交叉连接,允许在不需要单独的SETDéclarez les variables dans le contexte des commandes.
  • MySQL nécessite un alias de table pour toute sous-requête/table dérivée/vue en ligner

Remarques :

  • Fonctionne uniquement avec MySQL, non portable vers d'autres bases de données
  • ORDER BYTrè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粉006540600

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 :)

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!