Panne requête SQL

Fermé
SexyPotatoe Messages postés 12 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 16 juin 2015 - Modifié par SexyPotatoe le 6/05/2015 à 16:35
SexyPotatoe Messages postés 12 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 16 juin 2015 - 12 mai 2015 à 09:35
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 12 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 16 juin 2015
7 mai 2015 à 14:43
Je me permets de relancer le post.
0
benol3 Messages postés 569 Date d'inscription lundi 29 juillet 2013 Statut Membre Dernière intervention 7 mai 2015 87
7 mai 2015 à 14:58
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
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 12 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 16 juin 2015
9 mai 2015 à 15:23
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 12 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 16 juin 2015
12 mai 2015 à 09:35
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