Sum, Group By, et peut-être des jointures
Posté : 13 nov. 2011, 20:19
Bonjour à tous,
C'est en effectuant des recherches pour mon problème que je suis tombé sur votre forum. J'ai donc lu pas mal de documentation, parcouru votre forum à la recherche d'une éventuelle solution, mais pour trouver une solution, encore aurais-je besoin de savoir précisément ce que je cherche à faire. J'ai essayé d'être clair dans le titre de mon topic mais ce n'est pas évident. Je ne suis pas assez calé en SQL pour pouvoir chercher efficacement je le crains. Malgré tout, je vais tâcher d'être le plus clair et concis possible.
Tables & Structures
- Table A : champ id, nom, compteur1, compteur2, compteur3, ...
- Table B : champ id_m,compteur
Précisions :
- Le champ id de la table A équivaut au champ id_m de la table B. En clair, je peux trouver dans la table A, le nom où A.id = B.id_m.
- J'ai plusieurs compteurs qui correspondent tous à une chose précise. Cela peut être le nombre de fois où une page a été affichée, le nombre de clics effectués sur un bouton particulier, ...
- Les compteurs de la table A et celui de la table B n'ont rien à voir.
- Dans la table A, je n'ai (évidemment), qu'une ligne possible correspondant à un id.
- Dans la table B par contre, je peux - et j'ai souvent - plusieurs lignes correspondantes à un même id_m.
Ce que je cherche à faire :
Très simple. Mais compliqué pour moi "SQLement" parlant.
Ce que je cherche à faire, si possible en une seule belle et propre requête, c'est ceci :
- Additionner les compteurs de la table A,
- Grouper les lignes d'un même id de la table B et additionner le compteur correspondant,
- Additionner les compteurs de la table A avec le compteur de la table B.
- Enfin, récupérer le nom associé à chaque ligne de résultat.
Exemple :
Table A :
id nom compteur1 compteur2 compteur3
17 foo 0 36 7
996 bar 76 59 2
Table B :
id id_m compteur
(peu importe) 17 52
(peu importe) 17 3
(peu importe) 996 1
(peu importe) 17 0
(peu importe) 996 32
Le résultat que je souhaite obtenir :
17 foo 98 (c'est à dire, compteur1+2+3+ le compteur de chaque ligne de la table B)
996 bar 170
Où j'en suis
Du fait de mes connaissances limitées, ça ne m'étonnerait pas si vous me disiez que je suis sur une voie, longue mais possible, et qu'il existe beaucoup plus optimal comme solution.
Néanmoins, j'ai ceci :
Mais il me manque l'addition des compteurs de la table A avec ceux de la table B, et enfin à rapatrier le nom.
Voilà, j'espère que j'aurais réussi à être assez clair. Je sais que c'est toujours la mouise quand il faut mettre le nez dans le code des autres, alors je ne peux que vous féliciter pour ce forum et pour l'aide que vous y apportez ! Bref, j'espère que ce sera assez clair pour vous, histoire de ne pas faire un casse-tête de pas grand chose. Car pour des fins connaisseurs, je suis sûr que c'est pas quelque chose de très très compliqué. Seulement moi, je ne suis pas un fin connaisseur ^^
C'est en effectuant des recherches pour mon problème que je suis tombé sur votre forum. J'ai donc lu pas mal de documentation, parcouru votre forum à la recherche d'une éventuelle solution, mais pour trouver une solution, encore aurais-je besoin de savoir précisément ce que je cherche à faire. J'ai essayé d'être clair dans le titre de mon topic mais ce n'est pas évident. Je ne suis pas assez calé en SQL pour pouvoir chercher efficacement je le crains. Malgré tout, je vais tâcher d'être le plus clair et concis possible.
Tables & Structures
- Table A : champ id, nom, compteur1, compteur2, compteur3, ...
- Table B : champ id_m,compteur
Précisions :
- Le champ id de la table A équivaut au champ id_m de la table B. En clair, je peux trouver dans la table A, le nom où A.id = B.id_m.
- J'ai plusieurs compteurs qui correspondent tous à une chose précise. Cela peut être le nombre de fois où une page a été affichée, le nombre de clics effectués sur un bouton particulier, ...
- Les compteurs de la table A et celui de la table B n'ont rien à voir.
- Dans la table A, je n'ai (évidemment), qu'une ligne possible correspondant à un id.
- Dans la table B par contre, je peux - et j'ai souvent - plusieurs lignes correspondantes à un même id_m.
Ce que je cherche à faire :
Très simple. Mais compliqué pour moi "SQLement" parlant.
Ce que je cherche à faire, si possible en une seule belle et propre requête, c'est ceci :
- Additionner les compteurs de la table A,
- Grouper les lignes d'un même id de la table B et additionner le compteur correspondant,
- Additionner les compteurs de la table A avec le compteur de la table B.
- Enfin, récupérer le nom associé à chaque ligne de résultat.
Exemple :
Table A :
id nom compteur1 compteur2 compteur3
17 foo 0 36 7
996 bar 76 59 2
Table B :
id id_m compteur
(peu importe) 17 52
(peu importe) 17 3
(peu importe) 996 1
(peu importe) 17 0
(peu importe) 996 32
Le résultat que je souhaite obtenir :
17 foo 98 (c'est à dire, compteur1+2+3+ le compteur de chaque ligne de la table B)
996 bar 170
Où j'en suis
Du fait de mes connaissances limitées, ça ne m'étonnerait pas si vous me disiez que je suis sur une voie, longue mais possible, et qu'il existe beaucoup plus optimal comme solution.
Néanmoins, j'ai ceci :
SELECT id_m,SUM(compteur) AS total FROM B GROUP BY id_m
UNION
SELECT id,(compteur1+compteur2+compteur3+compteur4+...) FROM A
ORDER BY id_m ASC
Du coup il me manque pas énorme puisque ça m'additionne tout bien dans la table B, tout bien dans la table A.Mais il me manque l'addition des compteurs de la table A avec ceux de la table B, et enfin à rapatrier le nom.
Voilà, j'espère que j'aurais réussi à être assez clair. Je sais que c'est toujours la mouise quand il faut mettre le nez dans le code des autres, alors je ne peux que vous féliciter pour ce forum et pour l'aide que vous y apportez ! Bref, j'espère que ce sera assez clair pour vous, histoire de ne pas faire un casse-tête de pas grand chose. Car pour des fins connaisseurs, je suis sûr que c'est pas quelque chose de très très compliqué. Seulement moi, je ne suis pas un fin connaisseur ^^