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 Server 2000] MAX et jointure sur des données correspond


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 108
    Points : 46
    Points
    46
    Par défaut [SQL Server 2000] MAX et jointure sur des données correspond
    Bonjour

    j'ai deux tables : table (moyenne) avec comme champs (matricule,annee,trimestre,classe, moyenne) .dans la table moyenne les clés sont : matricule,annee,trimestre, classe
    et une seconde table: (eleve )avec comme champ ( matricule,nom, prenom ..etc..) cle = matricule.
    je tente en vain de faire une requête pour selecter la plus forte moyenne dans la première table (moyenne) et trouver le nom et le prenom dans la seconde table qui est la table élève .
    j'utilise SQL serveur 2000

    **************************requête**************
    select MAX(moyenne_trim) as
    fort,M.matricule_elev,E.matricule_elev,E.nom_elev,E.prenom_elev
    from MOYEN_ELEV_TRIM M, ELEVE E
    where m.matricule_elev=e.matricule_elev
    and M. code_trim=:trim
    and M. code_annee=:annee
    and M. num_classe=:clas
    group by moyenne_trim,E.matricule_elev,M.matricule_elev,e.nom_elev,E.prenom_elev
    **************
    je selectione la plus forte moyenne en fonction des choix :
    1- du trimestre
    2- du l'année
    3- de la classe
    mais n'arrive pas à prendre le nom correspondant de l'élève dans la seconde table qui est :eleve

    Merci pour votre précieuse aide SVP

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Peut être que l'élève qui a la plus forte moyenne n'est pas déclaré dans la
    table élève ... (présence d'une contrainte d'intégrité ?)

    Peut être que le choix saisi n'est pas trouvé dans la table moyenne (semestre et année et classe) auquel cas le fonction MAX va retourner une valeur NULL ...

    Et pourquoi un GROUP BY sur la requête ?

  3. #3
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par Luc Orient
    Peut être que l'élève qui a la plus forte moyenne n'est pas déclaré dans la
    table élève ... (présence d'une contrainte d'intégrité ?)

    Peut être que le choix saisi n'est pas trouvé dans la table moyenne (semestre et année et classe) auquel cas le fonction MAX va retourner une valeur NULL ...

    Et pourquoi un GROUP BY sur la requête ?
    Un group by parce qu'une fonction d'aggregation est presente dans la requete (Max). Cependant, pourquoi mettre moyenne_trim dans le group by puisque c'est sur cette colonne qu'a lieu l'aggregat ??
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  4. #4
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Citation Envoyé par Yanika_bzh
    Citation Envoyé par Luc Orient
    Peut être que l'élève qui a la plus forte moyenne n'est pas déclaré dans la
    table élève ... (présence d'une contrainte d'intégrité ?)

    Peut être que le choix saisi n'est pas trouvé dans la table moyenne (semestre et année et classe) auquel cas le fonction MAX va retourner une valeur NULL ...

    Et pourquoi un GROUP BY sur la requête ?
    Un group by parce qu'une fonction d'aggregation est presente dans la requete (Max). Cependant, pourquoi mettre moyenne_trim dans le group by puisque c'est sur cette colonne qu'a lieu l'aggregat ??

    +1 pour le 'Cependant, pourquoi ...'

    Ensuite il faut sélectionner le(s) éléve(s) ayant
    la moyenne la + élévée d'où une requête ou plutôt sous-requête
    supplémentaire ...
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  5. #5
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 108
    Points : 46
    Points
    46
    Par défaut fonction max et jointure surdes données correspondantes
    bonjour

    En fait dans la table moyenne j'arrive à trouver la plus forte moyenne. je dis bien la plus forte moyenne en fonction du choix de : trimestre; classe; annee. ok
    seulement je n'arrive pas à retrouver le nom de l'élève dans la table eleve alors qu'il y existe: ça m'affiche un autre nom qui ne correspond pas au nom de l'élève qui a la plus forte moyenne.
    je précise que c'est le n° matricule (clé) qui fait office de correspondance.
    ----
    yatil une autre manière de faire autre que ma requête ?

    je reste à l'ecoute SVP Merci d'avance.

  6. #6
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    En fait, ta requete est un peu plus compliqué que cela, car tu dois trouver
    1) La note maxi pour les criteres données
    2) L'ensemble des Matricules associé a ces criteres
    3) L'ensemble des eleves associés aux matricules.

    APres tu cherchers dans 2) ceux qui ont la note Maxi de 1)
    et tu fais la jointure avec eleve

    un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    SELECT 
       Requete2.moyenne_trim,
       Requete2.matricule_elev,
       Eleve.nom_elev,
       Eleve.prenom_elev 
    FROM
      (SELECT 
              MAX(moyenne_trim) as M1 
       FROM
              Moyen_elev_trim
       WHERE 
          code_trim=:trim AND
          code_annee=:annee AND
           num_class =:clas ) RequeteMoyenneMax,
       (SELECT 
               moyenne_trim ,
               matricule_elev 
        FROM
               Moyen_elev_trim
        WHERE
           code_trim=:trim AND
           code_annee=:annee AND
           num_class =:clas AND) Requete2,
    Eleve
    WHERE 
         eleve.matricule_eleve = Requete2.matricule_eleve
         AND Requete2.moyenne_trim = RequeteMoyenneMax.M1
    (Pas testé).
    Je ne sais pas si cela peut t'aider a avancer.
    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  7. #7
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 108
    Points : 46
    Points
    46
    Par défaut MAX et jointure sur des données correspondantes
    select
    moyen_elev_trim.moyenne_trim,
    moyen_elev_trim.matricule_elev,
    eleve.nom_elev,
    eleve.prenom_elev
    from
    (select
    MAX(moyenne_trim) as M1
    from moyen_elev_trim
    where
    code_trim=:trim
    and code_annee=:annee
    and num_classe=:clas) requetemoyenneMAX,
    (select
    moyenne_trim,
    matricule_elev
    from moyen_elev_trim
    where code_trim=:trim
    and code_annee=:annee
    and num_classe=:clas) requete2,
    eleve
    where
    eleve.matricule_elev=requete2.matricule_elev
    and requete2.moyenne_trim=equetemoyenneMAX.M1

    ********
    je comprends pas : c'est quoi : requete2 ; requetemoyennemax ça peut se remplacer par quoi dans mon cas
    j'ai tester mais ça va pas --
    bof suis pas encore calé -
    toujrs au secours

  8. #8
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Ce sont des ALIAS, pour que le SGBD sache de quelle sous requete viennent les valeurs
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  9. #9
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par Yanika_bzh
    Citation Envoyé par Luc Orient
    Peut être que l'élève qui a la plus forte moyenne n'est pas déclaré dans la
    table élève ... (présence d'une contrainte d'intégrité ?)

    Peut être que le choix saisi n'est pas trouvé dans la table moyenne (semestre et année et classe) auquel cas le fonction MAX va retourner une valeur NULL ...

    Et pourquoi un GROUP BY sur la requête ?
    Un group by parce qu'une fonction d'aggregation est presente dans la requete (Max). Cependant, pourquoi mettre moyenne_trim dans le group by puisque c'est sur cette colonne qu'a lieu l'aggregat ??
    Il me semble que le GROUP BY aurait été utile si on avait voulu connaître le meilleure élève de chaque année,trimestre,classe par exemple ...
    Mais là il s'agit d'une seule valeur ...

  10. #10
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT a.Annee, a.Trimestre, a.Classe, Moyenne, m.Matricule, Nom, Prenom
    FROM (SELECT Trimestre, Annee, Classe, MAX(Moyenne) as Maximum 
          FROM Moyenne 
          GROUP BY Trimestre, Annee, Classe) a
       INNER JOIN Moyenne m ON a.Trimestre = m.Trimestre
                           AND a.Annee     = m.Annee
                           AND a.Classe    = m.Classe
                           AND a.Maximum   = m.Moyenne 
       INNER JOIN Eleve e   ON m.Matricule = e.Matricule
    Il suffit de rajouter un WHERE si on veut un seul triplet (Annee, Trimestre, Classe)
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  11. #11
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 319
    Points : 80
    Points
    80
    Par défaut
    pourquoi dans ton from tu fait cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (SELECT Trimestre, Annee, Classe, MAX(Moyenne) as Maximum 
          FROM Moyenne 
          GROUP BY Trimestre, Annee, Classe)
    en theorie dans le from tu met le nom de la table

  12. #12
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par Médiat
    ...
    SELECT Trimestre, Annee, Classe, MAX(Moyenne) as Maximum
    FROM Moyenne
    GROUP BY Trimestre, Annee, Classe
    C'est ce que je disais, on a la la meilleure note de chaque trimestre année et classe. C'est sans doute interessant, mais est ce nécessaire pour répondre à la question posée ?

  13. #13
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Melvine
    pourquoi dans ton from tu fait cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (SELECT Trimestre, Annee, Classe, MAX(Moyenne) as Maximum 
          FROM Moyenne 
          GROUP BY Trimestre, Annee, Classe)
    en theorie dans le from tu met le nom de la table
    Le résultat d'un SELECT a la même forme qu'une table : des lignes et de colonnes...
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  14. #14
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Luc Orient
    C'est ce que je disais, on a la la meilleure note de chaque trimestre année et classe. C'est sans doute interessant, mais est ce nécessaire pour répondre à la question posée ?
    C'est plus général, mais surtout ce n'est pas là le point important.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  15. #15
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 108
    Points : 46
    Points
    46
    Par défaut MAX et jointure sur des données correspondantes
    Après reflexion peu être que je ne suis pas plus explicite :
    j'ai deux tables :
    table 1: MOYEN_ELEV_TRIM: table 2 :ELEVE :
    matricule_elev matricule_elev
    code_trim, nom_elev
    code_annee prenom_elev
    num_classe etc.....
    moyenne_elev.

    j'arrive à selecter selon le triplet : code_trim,code_annee,num_classe la plus forte moyenne dans la table 1. le problème c'est que je n'arrive pas à trouver le nom et le prenom de l'élève dans la table 2() qui est elève ou figure le nom et prenoms .

    SELECT E.matricule_elev,E.nom_elev
    from (select M.code_trim,M.code_annee,M.num_classe,M.matricule_elev, MAX(moyenne_elev) as maximum
    from moyen_elev_trim M
    group by M.code_trim,M.code_annee,M.num_classe)
    INNER JOIN moyen_elev_trim M
    on E.matricule_elev=M.matricule_elev
    where M.matricule_elev=E.matricule_elev
    and M.code_trim=:trim
    and M. code_annee=:annee
    and M. num_classe=:clas
    INNER JOIN eleve E on M.matricule_elev=E.matricule_elev

    j'ai testé ça mais ça marche pas

  16. #16
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut Re: MAX et jointure sur des données correspondantes
    Citation Envoyé par lepeule
    j'ai testé ça mais ça marche pas
    Je ne sais pas si c'est ma requête que tu as essayé d'adapter, mais si c'est le cas, il y a plein d'erreurs !

    Il faudrait que tu fasses l'effort d'écrire tes requêtes en les indenatant correctement et en utilisant la balise Code.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  17. #17
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 108
    Points : 46
    Points
    46
    Par défaut MAX et jointures sur des données correspondantes
    Désolé !!!!
    mais suis pas vraiment calé je crois que je dois encore bouquiner plus serieuselmnt

    je laisse tomber ça je me contenterai d'afficher la plus forte moyenne sans le nom de l'élève.
    comment utiliser la balise ?
    merci beaucoup

Discussions similaires

  1. [SQL SERVER 2000] Reorganisation d'index et des données
    Par dens19 dans le forum Administration
    Réponses: 4
    Dernier message: 17/06/2009, 21h49
  2. Réponses: 2
    Dernier message: 10/10/2006, 09h11
  3. [SQL Server 2000] Attach: error 1813 sur log
    Par Gugli dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/09/2006, 09h15
  4. [SQL server 2000] Problème de jointure avec 'Case'
    Par Tankian dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2006, 17h42
  5. [SQL-SERVER 2000] Problème de requête sur une seule ligne
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 16h54

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