Panne requête SQL

SexyPotatoe Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
SexyPotatoe Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Seulement un jour que je suis inscris ici et voila déjà ma deuxième question.

Toujours en vue d'élaguer une grande base de données, je dois effectuer une ou surement plusieurs pour que la table soit traitée comme convenue.

J'ai trois champs : ID, Puissance, Combustible

J'ai les conditions suivantes :
Si un "ID" contient plusieurs "Puissance", agréger l'ID en sommant les différentes "Puissance" ;
Si il y a plusieurs types de combustibles pour un même "ID", ne garder que le "Combustible" correspondant à la plus grande "Puissance".

Pour le premier j'ai essayé de me lancer avec la commande suivante :

SELECT ID, Sum(Puissance), Combustible
FROM MaTable
GROUP BY ID, Combustible;

ça fonctionne, mais il subsiste tout de même des ID doublons, d'autant plus que du coup, la somme des Puissance est faussée, vu qu'elle existe en double...

Merci de m'aider, l'avenir du canton de Vaud dépend de votre réponse !

Bien à vous...

5 réponses

SexyPotatoe Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Je me permets de relancer le post.
0
benol3 Messages postés 570 Date d'inscription   Statut Membre Dernière intervention   87
 
Salut,

Pour ta première requête, testes ceci :

SELECT DISTINCT ID, Sum(Puissance), Combustible 
FROM MaTable 
GROUP BY ID, Combustible;


Le "DISTINCT" devrait ôter les doublons...

Pour ta seconde demande, essaies cette requete :

SELECT ID, Combustible, MAX(Puissance)
FROM MaTable 
GROUP BY ID, Combustible;
0
Tessel75
 
Bonjour,
"Si il y a plusieurs types de combustibles pour un même "ID", ne garder que le "Combustible" correspondant à la plus grande "Puissance". "
Tu es obligé de faire en 2 temps, avec 2 requêtes, une pour sortir les puissances cumulées, une autre pour sortir les types de combustibles à retenir, et dans un 2ème temps, confronter les 2 résultats.
Je te propose:
1) Req1 = SELECT ID, Sum(Puissance) as PuissanceCumul FROM MaTable GROUP BY ID
2) Req2 = SELECT DISTINCT ID, Combustible FROM MaTable
3) Req3 = SELECT Req2.ID, Combustible, PuissanceCumul FROM Req2 LEFT JOIN Req1 on Req2.ID = Req1.ID

Une fois les 3 requêtes enregistrées, il suffit d'ouvrir la dernière pour avoir le résultat final, pas besoin d'ouvrir les 2 1ères. Il faut juste les tester une fois pouur vérifier qu'elles tournent correctement.
Bonne sute (C'était ma modeste participation à la survie du canton de Vaud)
0
SexyPotatoe Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Merci à tous pour la précision de vos réponses. Je testerai immédiatement les manipulations citées précédemment une fois au bureau lundi matin, et vous redonnerai des retours.

Bien à vous...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SexyPotatoe Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour à tous,

Après essai de vos manipulations, je me rends compte que le problème n'est, hélas, pas résolu. Il me reste toujours des doublons.

Le problème vient toujours de la sélection du combustible ayant la plus grande puissance si un ID se répète.

des idées ? Il me faudrait juste cette manipulation et tout serait résolu.

Je vais tenter de faire un schéma succinct mais efficace de ce que je souhaiterais obtenir, histoire que vous ayez une meilleure idée de l'objectif à atteindre :

J'ai, par exemple :
ID | Puissance | Combustible
1 100 Mazout
2 150 Gaz
3 200 Bois
3 300 Mazout
4 20 Solaire
4 100 Fioul
5 100 Mazout
5 500 Gaz
5 40 Solaire

Je souhaite obtenir :

ID | Puissance Totale | Combustible Principal
1 100 Mazout
2 150 Gaz
3 500 Mazout
4 120 Fioul
5 640 Gaz

Je rappelle que :
La puissance totale est la somme de la puissance de toutes les chaudières installées pour un même ID ;
Le combustible principale est le combustible qui génère la plus grande puissance.

Merci par avance de votre coopération...
0