Debuatante qui a besoin d aide en SQL :)

Fermé
sandra48 Messages postés 3 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 26 juillet 2008 - 26 juil. 2008 à 10:14
 algoplus - 26 juil. 2008 à 20:07
Bonjour,

Je suis actuellement en debut de formation et je debute sur sql . J ai un probleme avec un exercice qui m a ete donne

Cet exercice consiste à obtenir ceci :

ELEVE MOYENNE
elv01 13

ELEVE MOYENNE
elv02 11,33

ELEVE MOYENNE
elv03 13

Au depart on a une table NOTES :

elv01 fran 02/01/08 13
elv01 fran 05/02/08 11
elv01 math 15/01/08 14
elv02 fran 02/01/08 12
elv02 math 15/01/08 10
elv02 grec 18/02/08 12
elv03 fran 02/01/08 15
elv03 math 15/01/08 13
elv03 math 15/02/08 9

J ai reussi à obtenir le resultat en pl sql mais j ai besoin de l avoir en sql pour faire un classement des eleves .
Pour le moment j ai reussi à obtenir ceci :

IDMATIERE MOY1
--------- ----------------------
fran 12
math 14


IDMATIERE MOY1
--------- ----------------------
fran 12
grec 12
math 10


IDMATIERE MOY1
--------- ----------------------
fran 15
math 11


à partir de ce code :

select idmatiere , avg(note) as moy1 from notes where ideleve ='elv01' group by idmatiere ;
select idmatiere , avg(note) as moy1 from notes where ideleve ='elv02' group by idmatiere ;
select idmatiere , avg(note) as moy1 from notes where ideleve ='elv03' group by idmatiere ;

Mon probleme c est que je ne vois pas comment faire la moyenne de mes moyennes :(

Merci d'avance pour votre aide et à bientot :)
A voir également:

6 réponses

samling Messages postés 3 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 26 juillet 2008
26 juil. 2008 à 10:36
Tu pourrais faire :

$SelectElv01Fran1 = mysql_query("SELECT -tu indique la colonne de la première note de français- FROM notes WHERE ideleve ='elv01'");
$SelectElv01Fran2 = mysql_query("SELECT -tu indique la colonne de la deuxième note de français- FROM notes WHERE ideleve ='elv01'");
$SelectElv01Math = mysql_query("SELECT -tu indique la colonne de la note de Math- FROM notes WHERE ideleve ='elv01'");

$Elv01Fran1 = mysql_fetch_array($SelectElv01Fran1);
$Elv01Fran2 = mysql_fetch_array($SelectElv01Fran1);
$Elv01Math = mysql_fetch_array($SelectElv01Math);

$MoyenneElv01 = ($Elv01Fran1['-tu indique la colonne de la première note de français-'] + $Elv01Fran2['-tu indique la colonne de la Deuxième note de français-'] + Elv01Math['-tu indique la colonne de la note de Math-'] ) /3;

echo $MoyenneElv01;

Du moins c'est ce que je ferais ^^.
0
sandra48 Messages postés 3 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 26 juillet 2008
26 juil. 2008 à 10:48
Je comprends pas trop l ecriture mais c est pas vraiment un probleme .
Si je comprends bien ton calcul de la moyenne je n obtiendrai pas le bon resultat .
Prenons l eleve 1 on va additioner 13 +11 +14 ce qui nous donne 38 qu on divise par 3 mais ca ne va pas donner le resultat attendu qui est 13 .
13 qui provient de la moyenne des notes de francais (13 +11) /2 = 12 et de la moyenne des notes de maths (14/1=14 ) donc en moyenne generale (12+14)=13.

Merci quand meme de ton aide , sinon on l indique comment la colonne ?
0
samling Messages postés 3 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 26 juillet 2008
26 juil. 2008 à 11:06
Pour ce qui est du calcul, cela facilite la tâche et je ne l'avais pas entendu comme cela au départ excuse moi ^^.

Donc je recommence

//Voici les deux valeurs français
$Elv01Fran1 = '13';
$Elv01Fran2 = '11';

//J'en fais la moyenne
$MoyenneElv01Fran = ($Elv01Fran1 + $Elv01Fran2) /2;

//Je vérifie que la moyenne est bonne
echo $MoyenneElv01Fran;

//J'inscrit la valeur de la moyenne dans la case Fran qui se trouve dans ta table portant le nom notes.
mysql_query("UPDATE notes SET Fran = '$MoyenneElv01Fran');

//Je vais chercher dans ta table note deux valeurs : celle de la moyenne de français et celle de math
$SelectElv01Fran = mysql_query("SELECT Fran FROM notes WHERE ideleve ='elv01'");
$SelectElv01Math = mysql_query("SELECT Math FROM notes WHERE ideleve ='elv01'");

//Ce code permet d'afficher les valeurs à l'écran
$Elv01Fran = mysql_fetch_array($SelectElv01Fran);
$Elv01Math = mysql_fetch_array($SelectElv01Math);

//Je fais la moyenne générale
$MoyenneElv01 = ($Elv01Fran['-tu indique la colonne de la moyenne de français-'] + Elv01Math['-tu indique la colonne de la moyenne de Math-']) /2;

//Je vérifie la moyenne générale
echo $MoyenneElv01;


Pour ce qui est de comment indiquer une colonne, je te conseil de faire ( si ce n'est déjà fait ) une table qui s'appelle 'notes' dans laquelle tu créé plusieurs colonnes :

une qui s'appelle ideleve, une autre Fran et une autre Math. Et quand tu aura fait cela, n'oublie pas de faire tes trois ligne où tu n'aura qu'a indiquer dans la case ideleve : elv01. Et ensuite tu n'aura plus qu'a copier le code que je viens de faire et cela marchera. En dernier recours je pourrais te faire le code pour cet aprèm et te l'envoyer par le moyen que tu veux.
0
J'ai bien ça qui est plus sql, mais les moyennes ne sont pas celles attendues

select ideleve, avg(note) as moy1 from notes group by ideleve

j'y reflechi
0
sandra48 Messages postés 3 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 26 juillet 2008
26 juil. 2008 à 14:13
Merci pour votre aide , je vais essayer tout ca cet apres midi et je vous tiens au courant si j ai encore besoin de votre aide :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
essaie ceci Sandra48.
SELECT ideleve, avg(note) as moyenne
from (select ideleve, idmatiere, avg(note) as note from NOTE group by idmatiere)
group by ideleve;
0
une petite modif de la requête de 0101 qui ne 'tournait' pas sur access

SELECT ideleve, avg(moynote) as moyenne
from (select ideleve, idmatiere, avg(note) as moynote from notes group by ideleve,idmatiere)
group by ideleve

et pour obtenir le résultat demandé pour ton exercice

ELEVE MOYENNE
elv01 13

ELEVE MOYENNE
elv02 11,33

ELEVE MOYENNE
elv03 13

tu passes la requête suivante pour chaque eleve:

SELECT ideleve as ELEVE, avg(moynote) as MOYENNE
from (select ideleve, idmatiere, avg(note) as moynote from notes where ideleve="elv01" group by ideleve,idmatiere)
group by ideleve
0