faire un max d'une somme : j'y arrive pas ! [resolu] - SQL/NoSQL - Programmation
Marsh Posté le 26-04-2011 à 21:08:57
En mettant les SUM() dans une sous-requête ?
Code :
|
(j'ai un doute sur le LIMIT dans la sous-requête )
Marsh Posté le 26-04-2011 à 21:48:53
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.
Marsh Posté le 26-04-2011 à 22:13:13
L'erreur m'étonne
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 (
...
Marsh Posté le 27-04-2011 à 08:38:30
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
Marsh Posté le 27-04-2011 à 08:47:29
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
Marsh Posté le 26-04-2011 à 21:03:41
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