Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 03/06/2011, 14h33   #1
Invité de passage
 
hajare karim
Inscription : mars 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : hajare karim

Informations forums :
Inscription : mars 2010
Messages : 15
Points : 0
Points : 0
Par défaut La moyenne d'un élève

j'ai 5 tables ; chacune d'elle est reliée avec l'autre:

inscription(numinsc,nomprenom,IDniveau)

niveau(IDniveau,libelle)

matiere(IDmat,libellemat,Idunite,coef)

evaluation(numinsc,Idmat,note,observation)

unite(IDunite,libelleunite,

je veux une requête qui permet d'afficher la moyenne d'un élève donné (Numinsc) dans une unité donnée (libelleunite).
Bon moi j'ai essayé de créer la requête qui permet d'afficher les notes de chaque élève dans tous les matières avec une autre colonne qui calcule coef*note, mais je sais pas comment calculer la moyenne de chaque élève dans une unité qui contient bien sur un tel nombre de matières,c'est un peu difficile,:
Code :
1
2
3
4
5
SELECT inscription.NumInsc,nom_prenom,sexe,inscription.annee_scolaire,niveau.libniveau,matiere.libmatiere,note,(note*coef)AS'note*coef' FROM inscription
INNER JOIN niveau ON inscription.IDniveau=niveau.IDniveau
INNER JOIN evaluation ON inscription.NumInsc=evaluation.NumInsc
INNER JOIN matiere ON evaluation.IDmat=matiere.IDmat
ORDER BY inscription.NumInsc
aidez moi svp,
cordialement
hajer.
hajare est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 15h06   #2
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 085
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 085
Points : 1 883
Points : 1 883
Bonjour,
AVG renvoie la moyenne d'une valeur, donc tu peux faire ainsi:
Code SQL :
1
2
3
4
5
6
7
 
SELECT inscription.NumInsc,nom_prenom,inscription.annee_scolaire,matiere.libmatiere,avg(note) AS Moyenne FROM inscription
INNER JOIN niveau ON inscription.IDniveau=niveau.IDniveau
INNER JOIN evaluation ON inscription.NumInsc=evaluation.NumInsc
INNER JOIN matiere ON evaluation.IDmat=matiere.IDmat
GROUP BY inscription.NumInsc,nom_prenom,inscription.annee_scolaire,matiere.libmatiere
ORDER BY inscription.NumInsc

Tatayo.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 19h08   #3
Invité de passage
 
hajare karim
Inscription : mars 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : hajare karim

Informations forums :
Inscription : mars 2010
Messages : 15
Points : 0
Points : 0
merci,
mais la moyenne dans ce cas ne se calcule pas comme ça!!(avg(note))
car chaque matière a un coefficient donc ne pas oublier de multiplier chaque note avec son coefficient et de diviser ensuite la somme sur la somme des coefficients ça veut dire que la moyenne d'un élève dans l’unité français par exemple est égale à : (n1*coef1+n2*coef2+n*coef n)/coef1+coef2+coef n sachant que n1 et coef1 est la note et le coef concernant la matière 1 et n2....
car chaque unité peut englober plusieurs matières.
la moyenne dans ce cas est un peu plus difficile que avg(note),
je pense que tu comprends...!!
hajare est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 19h57   #4
Membre habitué
 
Avatar de tfc3146
 
Homme Robert Labrousse
Développeur décisionnel
Inscription : février 2009
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Robert Labrousse
Localisation : France

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : Boutique - Magasin

Informations forums :
Inscription : février 2009
Messages : 79
Points : 134
Points : 134
Bonjour,
Et si vous essayez :

Code :
SUM(note*coef)/SUM(coef)
tfc3146 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 20h37   #5
Invité de passage
 
hajare karim
Inscription : mars 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : hajare karim

Informations forums :
Inscription : mars 2010
Messages : 15
Points : 0
Points : 0
Par défaut Grammaire, orthographe

oui j'ai déjà essayé cette formule mais ça ne marche pas, voilà le code:
Code :
1
2
3
4
5
6
7
SELECT inscription.NumInsc,nom_prenom,sexe,inscription.annee_scolaire,niveau.libniveau,unite.libunite,matiere.libmatiere,note,(note * coef)AS'note*coef',(sum(note * coef)/sum(coef )) AS 'moy'FROM inscription
INNER JOIN niveau ON inscription.IDniveau=niveau.IDniveau
INNER JOIN evaluation ON inscription.NumInsc=evaluation.NumInsc
INNER JOIN matiere ON evaluation.IDmat=matiere.IDmat
INNER JOIN unite ON matiere.IDunite=unite.IDunite
WHERE unite.libunite LIKE 'français'  AND   inscription.NumInsc LIKE '100'                             
GROUP BY inscription.NumInsc,nom_prenom,sexe,inscription.annee_scolaire,niveau.libniveau,matiere.libmatiere,note,coef,unite.libunite
je ne sais pas où est le problème, mais la moyenne est incorrecte
hajare est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 22h01   #6
Membre habitué
 
Avatar de tfc3146
 
Homme Robert Labrousse
Développeur décisionnel
Inscription : février 2009
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Robert Labrousse
Localisation : France

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : Boutique - Magasin

Informations forums :
Inscription : février 2009
Messages : 79
Points : 134
Points : 134
Citation:
je sais pas ou est le probleme,mais la moyenne est incorrecte
Pour moi ça fonctionne

Code :
1
2
3
4
5
6
7
8
9
SELECT *
FROM MATIERE
 
 
MAT	NOTE	COEF
Francais	10	4
Anglais	11	3
Espagnol	2	8
Philo	3	4
Et ce qui donne la bonne moyenne : je sais ma moyenne ne vole pas haut

Code :
1
2
3
4
5
6
 
SELECT SUM(note*coef)/SUM(coef)
FROM MATIERE
 
SUM(NOTE*COEF)/SUM(COEF)
5,31578947368421052631578947368421052632
tfc3146 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 22h23   #7
Modérateur
 
Inscription : octobre 2008
Messages : 1 507
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 507
Points : 2 039
Points : 2 039
Le problème n'est pas dans la formule mais dans la requête.
note et coef ne devraient par être dans le GROUP BY.
En effet on calcule la moyenne des notes par étudiant, par année, par matière etc.. ça OK, mais la moyenne des notes par note, ça n'a pas de sens.
Même problème dans les colonnes du SELECT on ne peut pas sortir à la fois la note dans une colonne et la moyenne des notes dans la colonne d'à côté, puisqu'une moyenne correspond à plusieurs notes.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/06/2011, 23h59   #8
Invité de passage
 
hajare karim
Inscription : mars 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : hajare karim

Informations forums :
Inscription : mars 2010
Messages : 15
Points : 0
Points : 0
Le problème n'est pas dans la formule mais dans la requête.
note et coef ne devraient par être dans le GROUP BY.

si j'efface la note et le coef dans le group by,une erreur s'est produite:La colonne 'evaluation.Note' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY. et la meme chose pour le coef.

En effet on calcule la moyenne des notes par étudiant, par année, par matière etc.. ça OK, mais la moyenne des notes par note, ça n'a pas de sens.
Même problème dans les colonnes du SELECT on ne peut pas sortir à la fois la note dans une colonne et la moyenne des notes dans la colonne d'à côté, puisqu'une moyenne correspond à plusieurs notes.

de ce qui concerne ce probleme tu as raison,mais juste je teste le resultat sur sql server,pour l'appliquer sur visual basic donc ce probleme n'aura pas de sens
hajare est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2011, 00h22   #9
Invité de passage
 
hajare karim
Inscription : mars 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : hajare karim

Informations forums :
Inscription : mars 2010
Messages : 15
Points : 0
Points : 0
merci pour tous ce qui poster une réponse dans ce sujet,
Enfin j'ai résolu le probleme,voila le code:
Code :
1
2
3
4
5
SELECT inscription.NumInsc,unite.libunite,(sum(note * coef)/sum(coef )) AS 'moy' FROM evaluation
INNER JOIN matiere ON evaluation.IDmat=matiere.IDmat
INNER JOIN unite ON matiere.IDunite=unite.IDunite
INNER JOIN inscription ON evaluation.NumInsc=inscription.NumInsc
GROUP BY inscription.NumInsc,unite.libunite
hajare 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 18h32.


 
 
 
 
Partenaires

Hébergement Web