Panne requête SQL [Fermé]

Signaler
Messages postés
12
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
16 juin 2015
-
SexyPotatoe
Messages postés
12
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
16 juin 2015
-
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

Messages postés
12
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
16 juin 2015

Je me permets de relancer le post.
Messages postés
577
Date d'inscription
lundi 29 juillet 2013
Statut
Membre
Dernière intervention
8 juillet 2015
49
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;
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)
Messages postés
12
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
16 juin 2015

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...
Messages postés
12
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
16 juin 2015

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...