Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
890 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [resolu] faire un max d'une somme : j'y arrive pas !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[resolu] faire un max d'une somme : j'y arrive pas !

n°2072097
domi_bu
Posté le 26-04-2011 à 21:03:41  profilanswer
 

Bonsoir
 
Quand je lance cette requête "mysql" , tout va bien, je récupère bien une liste.
 
SELECT ( sum( re.note_numerique * e.coefficient ) / sum( e.coefficient ) )
FROM resultat_epreuve re
JOIN epreuve e ON ( e.id_epreuve = re.id_epreuve )
JOIN matiere m ON ( e.id_matiere = m.id_matiere )
JOIN classe c ON ( c.id_classe = e.id_classe )
WHERE c.id_classe =41
AND e.date_epreuve >= "2010-01-01"
AND e.date_epreuve <= "2015-01-01"
GROUP BY m.id_matiere, m.libelle_long_matiere
LIMIT 0 , 30
 
Je voudrai maintenant récupérer le max de cette liste.J'ai donc tout naturellement ajouté le mot clé MAX comme suit :
 
SELECT max( sum( re.note_numerique * e.coefficient ) / sum( e.coefficient ) )
FROM resultat_epreuve re
JOIN epreuve e ON ( e.id_epreuve = re.id_epreuve )
JOIN matiere m ON ( e.id_matiere = m.id_matiere )
JOIN classe c ON ( c.id_classe = e.id_classe )
WHERE c.id_classe =41
AND e.date_epreuve >= "2010-01-01"
AND e.date_epreuve <= "2015-01-01"
GROUP BY m.id_matiere, m.libelle_long_matiere
LIMIT 0 , 30
 
 
Et là je me prends une erreur vilaine : #1111 - Invalid use of group function
 
La doc dit qu'on ne peut pas faire de aggrégat d'aggrégat. Dés lors comment faire ?  
 
Nb  :suis pas l'expert en sql, vos suggestions seront les bienvenues.
 
 
DOminique


Message édité par domi_bu le 27-04-2011 à 08:47:42

---------------
Domi
mood
Publicité
Posté le 26-04-2011 à 21:03:41  profilanswer
 

n°2072098
mrbebert
Posté le 26-04-2011 à 21:08:57  profilanswer
 

En mettant les SUM() dans une sous-requête ?

Code :
  1. select MAX(la_somme) from (
  2.   SELECT ( sum( re.note_numerique * e.coefficient ) / sum( e.coefficient ) ) la_somme
  3.   FROM resultat_epreuve re
  4.   JOIN epreuve e ON ( e.id_epreuve = re.id_epreuve )
  5.   JOIN matiere m ON ( e.id_matiere = m.id_matiere )
  6.   JOIN classe c ON ( c.id_classe = e.id_classe )
  7.   WHERE c.id_classe =41
  8.   AND e.date_epreuve >= "2010-01-01"
  9.   AND e.date_epreuve <= "2015-01-01"
  10.   GROUP BY m.id_matiere, m.libelle_long_matiere
  11.   LIMIT 0 , 30
  12. ) tb_a


 
(j'ai un doute sur le LIMIT dans la sous-requête [:figti] )


Message édité par mrbebert le 26-04-2011 à 21:09:36

---------------
Doucement le matin, pas trop vite le soir.
n°2072104
domi_bu
Posté le 26-04-2011 à 21:48:53  profilanswer
 

salut mrbebert
 
nn ça marche pas. il ne veut pas que l"alias "la_somme" soit utilisé dans 2 requetes . Merci tout de même pour la suggestion.

n°2072107
mrbebert
Posté le 26-04-2011 à 22:13:13  profilanswer
 

L'erreur m'étonne [:darkmavis xp]  
Je donne un nom à la colonne de la sous-requête pour l'utiliser facilement dans la requête principale, rien d'exceptionnel.
Essaie avec  :
select MAX(tb_a.la_somme) from (
...


---------------
Doucement le matin, pas trop vite le soir.
n°2072134
domi_bu
Posté le 27-04-2011 à 08:38:30  profilanswer
 

rebonjour mrbebert
 
ben non y veut pas ! toujours la même erreur "Every derived table must have its own alias". Je pense qu'il apprécie pas que le champ aggrégué soit utilisé dans une sous requête + requête principale en même temps.  
 
 
Mais j'ai trouvé une ruse pour m'en sortir différemment. Je rajoute un limit 1 comme ça je peux avoir le min et le max en triant cette liste par ordre croissant ou décroissant.  
 
Ca marche mais du coup je fais 2 requêtes au lieu d'en faire qu'une seule.  
 
Je mets résolu à moitié car ça me dépanne mais ne me satisfait pas complétement.
 
Dominique

n°2072136
domi_bu
Posté le 27-04-2011 à 08:47:29  profilanswer
 

j'ai fini par trouvé, et j’avais mal lu ta réponse mrbebert. Fallait renommer la table (et tu l'avais bien écris). Donc ça marche, je uis une quiche en sql mais je progresse tous les jours.  
 
Merci pour tes réponses.  
dOminique


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [resolu] faire un max d'une somme : j'y arrive pas !

 

Sujets relatifs
somme datetime[RESOLU] Erreurs HTML
Count et sommeSomme des valeurs Algo quand la saisie est terminé
XSLT somme par type de produitSQL: une somme toute bête
[Excel] somme conditionelle su deux colonnes ?[Boost::Asio] Arrive pas a se connecter a un serveur sous boost
aide pour algo "somme des chiffres d'un nombre"lien vers maps avec arrivé prérempli
Plus de sujets relatifs à : [resolu] faire un max d'une somme : j'y arrive pas !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR