MySql mise à JOUR avec la SOMME dans le même tableau
Je travaille avec un tableau (les résultats) qui a la structure suivante (ne me demandez pas, je n'ai pas le construire)
id | record_type | user_id | answer_id | choice | score | total | email
-------------------------------------------------------------------------------
1 email xxxxxxx 0 userX@site.com
2 answer xxxxxxx aaaaaa A 0
3 answer xxxxxxx bbbbbb A 0
4 answer xxxxxxx cccccc B 10
5 email yyyyyyy 0 userY@site.com
6 answer yyyyyyy aaaaaa A 0
7 answer yyyyyyy bbbbbb A 0
8 answer yyyyyyy cccccc A 0
9 email zzzzzzz 0 userZ@site.com
10 answer zzzzzzz aaaaaa A 0
11 answer zzzzzzz bbbbbb A 0
12 answer zzzzzzz cccccc B 10
C'est un sondage et les valeurs de score de bonnes réponses changé après les sondages ont été soumis. J'ai déjà lancer une mise à jour pour régler les valeurs de score pour "corriger" les réponses à 10 et maintenant, j'ai besoin de mettre à jour le total pour les lignes avec record_type: e-mail afin que nous puissions contacter les gagnants.
L'objectif serait de définir le total de la colonne pour les lignes 1,5 et 9 à 10,0 et 10
Je suis en train de penser à quelque chose comme ceci
UPDATE results SET total = SUM(score)
FROM results GROUP BY user_id WHERE user_id = user_id
Mais cela ne veut pas regarder à droite et je suis inquiet que je suis peut-être aller dans le mauvais chemin.
OriginalL'auteur byron | 2013-02-21
Vous devez vous connecter pour publier un commentaire.
Concernant l'efficacité énergétique, un index sur
(record_type, user_id, score)
permet aussi bien de manière efficace calculer la dérivée de la table et avec l'auto-jointure.Question pour vous les gars...je suis en cours d'exécution sur une table avec ~400K de lignes et de s'écraser (probablement à court de mémoire). Des suggestions pour les résoudre? Comme, un moyen d'exécuter la requête en morceaux?
Cela peut paraître "compliqué", mais est en fait facile à mettre en œuvre et fonctionne comme un rêve (vous avez besoin d'un index unique, j'ai dû en créer un pour mon exigence)
belle. Merci beaucoup
OriginalL'auteur ypercubeᵀᴹ
Vous y êtes presque.
Cela devrait fonctionner
Il retourne
Error Code: 1093. You can't specify target table 'r' for update in FROM clause
Wow, travaillé pour mon cas. Ceux qui disent ça ne fonctionne pas, seriez-vous tout de le modifier pour l'adapter à votre cas, s'il vous plaît !
il fonctionne grâce à l'aide de
results r2
dans la sous requêteOriginalL'auteur Achrome