Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/04/2007, 13h50   #1
Membre habitué
 
Inscription : décembre 2006
Messages : 156
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 156
Points : 103
Points : 103
Par défaut Problème avec la fonction AVG

Bonjour;
Je suis sur Mysql server 5.0, j'utilise Mysql query browser.
J'ai selectionné les notes données aux étudiants par un prof.
Je souhaite maintenant afficher uniquement les notes inférieures à la note moyenne.
J'ai rajouté une dernière ligne pour n'afficher que les notes inférieures à la moyenne mais il y a une erreur de syntaxe dans cette dernière ligne.
Trouvez-vous la solutions? Merci.
Voici le code :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
SELECT e.nom_etudiant, nota.note, p.nom_prof, p.prenom_prof
FROM etudiant e, notation nota, cours c,
nomination nomi,prof p
WHERE e.id_etudiant = nota.id_etudiant
AND nota.id_cours = c.id_cours
AND c.id_cours = nomi.id_cours
AND nomi.id_prof = p.id_prof
AND p.nom_prof = 'EVANS'
AND p.prenom_prof = 'Bill'
AND nota.note < SELECT avg (nota.note);
cirtey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 14h00   #2
Modérateur
 
Avatar de Cybher
 
Homme Michel
Consultant informatique
Inscription : mai 2005
Messages : 3 006
Détails du profil
Informations personnelles :
Nom : Homme Michel
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : mai 2005
Messages : 3 006
Points : 4 039
Points : 4 039
salut,

deja tu ne precise pas ta table dans ton deuxieme select
sinon le message d'erreur pourrait etre utile
Cybher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 14h34   #3
Nouveau Membre du Club
 
Inscription : août 2005
Messages : 74
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France

Informations forums :
Inscription : août 2005
Messages : 74
Points : 31
Points : 31
tu ne peux pas mettre de select comme cela
AND nota.note < select avg (nota.note);
Un select est toujours suivi d'un FROM

La réponse est juste
AND nota.note < avg (nota.note);
AODRENN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 14h52   #4
Membre habitué
 
Inscription : décembre 2006
Messages : 156
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 156
Points : 103
Points : 103
Salut;
J'ai déjà effectué AND nota.note < avg (nota.note); sans select, mais le résultat est une erreur 1111 'invaild use of group function'.
A noter que lorque je fais AND nota.note < (select avg (nota.note) from notation); je n'ai pas de message d'erreur mais pas de résultat non plus.
cirtey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 14h53   #5
Modérateur
 
Avatar de Cybher
 
Homme Michel
Consultant informatique
Inscription : mai 2005
Messages : 3 006
Détails du profil
Informations personnelles :
Nom : Homme Michel
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : mai 2005
Messages : 3 006
Points : 4 039
Points : 4 039
et si tu precise le nom de la table dans le 2eme select?
Cybher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 15h02   #6
Membre habitué
 
Inscription : décembre 2006
Messages : 156
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 156
Points : 103
Points : 103
Oui je précise la table du deuxième from corresepondant au deuxième select.
cirtey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 13h03   #7
Membre Expert
 
Avatar de Sivrît
 
Inscription : février 2006
Messages : 953
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 953
Points : 1 189
Points : 1 189
Citation:
Envoyé par cirtey
nota.note < (select avg (nota.note) from notation);
C'est équivalent à "nota.note < nota.note" donc toujours faux, d'où l'absence de résultat.

Code :
1
2
3
4
5
6
7
8
9
 
SELECT e.nom_etudiant, nota.note, p.nom_prof, p.prenom_prof
FROM etudiant e
     JOIN notation nota ON e.id_etudiant = nota.id_etudiant
     JOIN cours c ON nota.id_cours = c.id_cours
     JOIN nomination nomi ON c.id_cours = nomi.id_cours
     JOIN prof p ON nomi.id_prof = p.id_prof
WHERE p.nom_prof = 'EVANS' AND p.prenom_prof = 'Bill'
      AND nota.note < (SELECT avg(note) FROM notation);
Les JOIN sont facultatifs mais je préfère pour des raisons de lisibilité.

Par contre je suppose que la moyenne à utiliser est celle du prof concerné, ce qui implique d'utiliser :
Code :
nota.note < (SELECT avg(note) FROM notation WHERE id_cours=c.id_cours);

Et pour simplifier :

Code :
1
2
3
4
5
6
7
8
 
SELECT e.nom_etudiant, nota.note, p.nom_prof, p.prenom_prof
FROM etudiant e
     JOIN notation nota USING (id_etudiant)
     JOIN nomination nomi USING (id_cours)
     JOIN prof p USING (id_prof)
WHERE p.nom_prof = 'EVANS' AND p.prenom_prof = 'Bill'
      AND nota.note < (SELECT avg(note) FROM notation WHERE id_cours=nota.id_cours);
Sivrît est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h58.


 
 
 
 
Partenaires

Hébergement Web