IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[SQL] Calculer moyenne des etudients sur un module et sur la formation


Sujet :

Langage SQL

  1. #21
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    lol

    Alors, ce qui est dans le ON c'est la condition qui relie une ligne de la table principale (ou d'une autre table de la requête) à la table que tu viens de joindre

    indépendament de ce qu'on veut que retourne la requête, en théories, pour deux tables données, il n'y a qu'un seul ensemble de conditions de jointures possibles... ça vient de la structure même des tables...

    Le WHERE quant à lui, est là pour filtrer les lignes qui doivent être prises en compte dans l'amas de données généré par les jointures

    Enfin le HAVING filtre les données à la fin de la requête afin de ne prendre que celles qu'on juge intéressantes pour le résultat qu'on veut avoir ^^


    Est-ce que tu comprends mieux maintenant pourquoi la condition sur le Prénom et le Nom "doivent" être dans un WHERE et non dans le ON ?
    ça ne fait pas partie des informations qui permettent de relier tblStudents aux autres tables, mais bien du filtrage des données entrantes dans la requête
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  2. #22
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Salut Swoög,

    tjs fidele au poste, merci.

    Est ce que je dis une connerie en disant donc que c car en fait Ne donne pas une relation entre les deux tableaux, mais seulement une selection parmi le resultat ?

    Autre point, j ai une super nouvelle : JE ME SUIS PLANTE DANS MON SCHEMA DE RELATION ENTRE LES TABLES !! Chier. Car en effet, un assessment doit etre unique quelque soit le module, donc du type SVI444_1, SVI444_2 ... Donc ce n est pas dutout une primary key de mon tableau tblStudentAssessmentModule. En fait ca n a meme rien a faire la, mais le moduleID doit etre foreign Key du tableau Assessment. Voir le schema que je joins.

    Je vais essayer de reecrire toutes les queries pour voir si j ai capté quelque chose ^^
    Images attachées Images attachées  

  3. #23
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Slumpy
    Est ce que je dis une connerie en disant donc que c car en fait Ne donne pas une relation entre les deux tableaux, mais seulement une selection parmi le resultat ?
    Non, ce n'est pas une connerie
    enfin, c'est pas vraiment exact non plus... si tu considère que c'est une sélection parmis le résultat, alors il te faut utiliser HAVING, et dans ce cas le GROUP BY est nécessaire...
    C'est plutôt un filtrage sur les données récupérées suite à la jointure, mais avant les opérations (sommes etc...) donc WHERE

    en fait, il faut distinguer trois étapes principales : pendant la construction de la jointure (les ON), après la jointure, mais avant l'exécution de la requête (WHERE)
    après l'exécution de la requête, des divers calculs, group by, order by, etc... (HAVING)

    Je sais pas si c'est très clairs...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  4. #24
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Si si c tres clair merci. En fait c moi qui me suis mal exprimé en disant "sur le resultat", mais je pensais bien avant la somme donc un where.

    Bon, j ai tout faux, mais je commence a comprendre

    Peut on grouper par atribut sur des tableaux differents ? Je veux dire, maintenant que ModuleID est dans mon tableau tblAssessment et non pas dans tblStudentAssessment (anciennement tblStudentAssessmentModule), peut on appliquer pour la requete sur la moyenne pour chaque eleve sur chaque module, le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      SELECT SA.StudentID, A.ModuleID, SUM(SA.Score * A.Weight) AS Average
      FROM tblStudentAssessment AS SA INNER JOIN tblAssessment AS A
                                                   ON SA.AssessmentID = A.AssessmentID
      GROUP BY SA.StudentID, A.ModuleID
    au lieu d'anciennement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      SELECT SAM.StudentID, SAM.ModuleID, SUM(SAM.Score * A.Weight) AS Average
      FROM tblStudentAssessmentModule AS SAM INNER JOIN tblAssessment AS A
                                                   ON SAM.AssessmentID = A.AssessmentID
      GROUP BY SAM.StudentID, SAM.ModuleID
    J aurais aussi besoin d une confirmation sur le code suivant stp. (C pour voir si j ai bien compris le choix entre Join et where). Elle a pour but de faire la moyenne generale des etudients qui arrivent de france.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      SELECT S.Surname, S.FirstName, SUM(SA.Score * A.Weight * M.Coefficient)/ SUM(M.Coeficient) AS Average
      FROM tblStudentAssessment AS SA INNER JOIN tblAssessment AS A
                                                   ON SA.AssessmentID = A.AssessmentID
                                                       INNER JOIN tblModule AS M
                                                  ON A.ModuleID = M.ModuleID
                                                       INNER JOIN tblStudent AS S
                                                  ON SA.StudentID = S.StudentID
      WHERE S.Country=’France’
        GROUP BY SA.StudentID 
      ORDER BY Surname, Firstname
    Un HAVING plutot qu un where serait possible la ? Bien sur ce serait inutile de calculer pour tous et d afficher que pour ceux qui arrivent de france, mais bon, c juste pour saoivr si je vois la difference )

  5. #25
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Arf, mon professeur de SQL a une vie . Vais ptet devoir songer a en avoir une aussi tiens

  6. #26
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Slumpy
    Arf, mon professeur de SQL a une vie . Vais ptet devoir songer a en avoir une aussi tiens
    En fait quand tu as éditer le topic, ça l'a pas fait remonter dans les nouveaux messages postés

    alors, oui il n'y a pas de problème pour disperser le GROUP BY sur plusieurs tables ^^

    la seconde requête est bonne aussi, comme tu l'as signalé, on pourrait utiliser un HAVING, mais ça serait une perte de performances


    Bonne Continuation


    PS : je viens de m'apercevoir qu'en fait j'ai dit que j'avais pas de vie... bon, même si c'est vrai c'est pas une raison pour me le faire dire
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  7. #27
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Coucou toi, desolé pour le double post, mais ct justement pour le faire remonté ^^.

    Cool si il n y a pas de fautes dans ma requete, je dois commencer a comprendre le truc :p

    1)Du coup, si mes requetes que je t ai dis la etaient bonnes, ca me montre que je n ai rien a changer dans mes requetes alors que j ai changé le ModuleID de tableausauf l'indice SAM. qui devient A. devant tous mes ModuleID ?

    2)Le fait que les tables soient declarées dans des joins ne pose pas de pb pour les utiliser dans des Group By ?

    3)Autre point le fait de declarer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY Surname, Firstname
    et donc de ne pas mette S. devant n est il pas un probleme ? (Je pense que c pas rigoureux, mais correct car un seul attribut porte ce nom, c ca ?)

  8. #28
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Slumpy
    Coucou toi, desolé pour le double post, mais ct justement pour le faire remonté ^^.
    pas de problème, de toutes façons, sans ça je serais sûrement pas revenu voir avant un bout de temps lol, pour une fois c'était justifier ^^

    Citation Envoyé par Slumpy
    1)Du coup, si mes requetes que je t ai dis la etaient bonnes, ca me montre que je n ai rien a changer dans mes requetes alors que j ai changé le ModuleID de tableausauf l'indice SAM. qui devient A. devant tous mes ModuleID ?
    Oui, mais fait gaffe a quand même toujours joindre tblAssessment même quand tu n'as besoin que de tblModule

    Citation Envoyé par Slumpy
    2)Le fait que les tables soient declarées dans des joins ne pose pas de pb pour les utiliser dans des Group By ?
    non, car le GROUP BY s'effectue pendant les calcul, après le WHERE, donc la jointure a déjà étée faite, du point de vue du moteur du SGBD, il n'y a plus qu'une énorme table

    Citation Envoyé par Slumpy
    3)Autre point le fait de declarer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY Surname, Firstname
    et donc de ne pas mette S. devant n est il pas un probleme ? (Je pense que c pas rigoureux, mais correct car un seul attribut porte ce nom, c ca ?)
    En effet, ce n'est pas très rigoureux, il vaut mieux toujours préciser d'où viennent ses champs... mais dans la mesure où il n'y a pas de risque d'ambigüité, ce n'est pas obligatoire [il y a même des cas un peu plus subtiles pour certains SGDB, ou l'ambigüité est annulée, exemple deux champs qui ont le même nom mais qui (à la suite d'une jointure par exemple) seront forcément égaux, etc..., Mais, mieux vaut éviter de jouer avec ça ^^]
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  9. #29
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Héhé, vraiment un grand merci pour toutes t explications et le temps que tu m accordes. Tu serais pas en angleterre en ce moment, si oui, je te paye a boire pour te remercier, quand tu veux .

    Sinon, pour changer, j ai encore une question ^^.

    Je comprends tout a fait pourquoi il vaut mieux prendre l abbitude de tjs preciser la table dans laquele l'attribut est pris.

    Mais je ne comprends pas ca :
    fait gaffe a quand même toujours joindre tblAssessment même quand tu n'as besoin que de tblModule

  10. #30
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Slumpy
    Héhé, vraiment un grand merci pour toutes t explications et le temps que tu m accordes. Tu serais pas en angleterre en ce moment, si oui, je te paye a boire pour te remercier, quand tu veux .
    hélas nan, chuis même plutôt loin... chuis à côté d'Avignon (sud-est de la France) là... et faut que j'y sois dans.... 10h10 pour un partiel d'ASM j'pourrais pas venir

    Citation Envoyé par Slumpy
    Mais je ne comprends pas ca :
    Citation Envoyé par Swoög
    fait gaffe a quand même toujours joindre tblAssessment même quand tu n'as besoin que de tblModule
    Et bien maintenant, quand tu es dans la table tblStudentAssessmentModule, tu n'as plus d'accès direct à tblModule il te faut obligatoirement penser à passer par tblAssessment
    en même temps, je pense pas que tu l'oublie jamais, mais une erreur d'innatention, c'est si vite arrivé lol
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  11. #31
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    hélas nan, chuis même plutôt loin... chuis à côté d'Avignon (sud-est de la France) là... et faut que j'y sois dans.... 10h10 pour un partiel d'ASM j'pourrais pas venir
    Ben je boierai les deux bieres alors ^^

    Lol t as partiel dans 10h et t sur un forum ???

    fait gaffe a quand même toujours joindre tblAssessment même quand tu n'as besoin que de tblModule
    Ha oki, mais tu veux dire ModuleID a la place de tblModule non ?

  12. #32
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Slumpy
    Lol t as partiel dans 10h et t sur un forum ???
    bah ouais :-P

    Citation Envoyé par Slumpy
    Ha oki, mais tu veux dire ModuleID a la place de tblModule non ?
    non non, je parle bien de la table (on joint deux tables entre elles par rapport à une relation qui portent sur les champs ^^, on ne joint pas de champs ^^)
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  13. #33
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    non non, je parle bien de la table (on joint deux tables entre elles par rapport à une relation qui portent sur les champs ^^, on ne joint pas de champs ^^)
    Donc quand tu dois aller chercher un attribut dans un tableau qui n est pas directement lié tu dois lier tout ce qui est entre ? c ca ?

  14. #34
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    exactement
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  15. #35
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Bon ben voila on touche au but, j ai plus de questions ^^

    J y vois enormement plus clair qu avant ce post.

    Merci a toi Swoög pour tout le temps que tu m as accordé, c super sympa.

    Et bonne chance pour demain ^^

  16. #36
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Merci, je vais sauvegarder ce post, comme ça au besoin je l'aurais sous la main

    Bonne continuation, à la prochaine ^^
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Calcul moyenne des notes en perl
    Par Contreras dans le forum Langage
    Réponses: 1
    Dernier message: 22/11/2011, 14h00
  2. Réponses: 4
    Dernier message: 14/12/2009, 20h31
  3. [MODULE] erreur sur le module DBI perl postgres
    Par neco2006 dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 27/11/2009, 16h23
  4. [1.x] Creer un filtre sur un module CRUD sur Symfony 1.1
    Par katie.gillot dans le forum Symfony
    Réponses: 1
    Dernier message: 28/10/2008, 17h00
  5. Réponses: 1
    Dernier message: 28/03/2007, 19h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo