6
votes

Somme plusieurs rangées

J'ai donc une table comme celle-ci: xxx

et je veux résumer chaque valeur pour toutes les lignes pour un identifiant spécifique dans un total d'appels de colonne, mais je ne veux pas Grouper l'ID ensemble parce qu'ils ont un numéro de mod différent. Je veux un résultat comme celui-ci: xxx

Je ne peux pas utiliser le groupe par car il me donnera le total pour toutes les lignes individuelles. Comment puis-je atteindre le résultat que je veux?


5 commentaires

Je ne comprends pas le calcul derrière la colonne totale?


Avec des fonctions Windows, vous pouvez obtenir une seule requête de ligne pour renvoyer les résultatsset dont vous avez besoin. Malheureusement, MySQL ne les soutient pas.


@ NJZK2: Si vous regardez la première table, vous verrez que des correspondances totales avec les totaux pour tous les éléments contre ID . Le mod ne semble pas avoir d'impact réel afin que total semble être une colonne redondante pour chaque enregistrement dans la deuxième table.


@ njzk2 Vérifiez toutes les valeurs de 1 ID Vous obtenez l'idée de savoir comment 7 viennent .. Première rangée.


Pourquoi voudriez-vous conserver la colonne mod dans les Restructions lorsqu'il transmet aucune information?


5 Réponses :


7
votes

Vous pouvez faire quelque chose comme ceci: xxx

Je ne sais pas sur la performance de cela ...


1 commentaires

Je pense que cela nécessiterait table . préfixe avant ID dans la clause SELECT



2
votes

Essayez:

select t.id, t1.mod, t.total
from tab t1
join (select id, sum( IFNULL(n1,0)+ IFNULL(n2,0)+ IFNULL(n3,0)) as total
      from tab 
      group by id) t on t.id=t1.id


0 commentaires

1
votes
SELECT `id`, `mod`, (SUM(n1) + SUM(n2) + SUM(n3)) AS total
FROM `table` 
 GROUP BY `id`,`mod`

0 commentaires

0
votes

Cela devrait fonctionner pour vous. Travaillé à Oracle. Vérifiez si les mots-clés doivent être modifiés dans MySQL.

SELECT x.id, x.mod, y.sum
  FROM table x,
       (SELECT id, sum(nvl(n1, 0) + nvl(n2, 0) + nvl(n3, 0)) sum
          FROM table
         GROUP BY id) y
 WHERE x.id = y.id;


0 commentaires

1
votes

La deuxième réponse a été correcte, tout ce qui est nécessaire était des appels corrects vers ifnull xxx


0 commentaires