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 :

Utilisation de count et group by


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Utilisation de count et group by
    Bonjour,

    D'avance, veuillez m'excuser si la question a déjà été posée.

    J'ai une table qui liste des résultats, et parmi lesquels je veux récupérer :
    - l'étudiant
    - le semestre
    - la moyenne
    - d'autres infos

    Mon problème est que j'aimerais également afficher dans une colonne le nombre d'enregistrements correspondant à cet étudiant, sans tenir compte du semestre, de la moyenne, etc ...

    Autrement dit, je voudrais avoir quelque chose du type :

    Etudiant1 Semestre1 12 2
    Etudiant1 Semestre2 9 2
    Etudiant2 Semestre1 13 1

    Si je fais un COUNT, je suis forcée de mettre le semestre et toutes mes autres infos dans le GROUP BY, donc les résultats que j'obtiens ne sont pas pertinents :

    Etudiant1 Semestre1 12 1
    Etudiant1 Semestre2 9 1
    Etudiant2 Semestre1 13 1

    Y a-t-il un moyen pour afficher ce que je veux ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Il faudrait pour pouvoir te répondre connaitre la structure de ta table et le SGBD que tu utilises.
    Pourrais-tu aussi nous donner la requête que tu as déjà essayée ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Merci de ta réponse.

    J'utilise SQLServer.

    Ma table RESULTATS contient les champs suivants :
    - l'ID du résultat
    - l'ID de l'étudiant
    - l'ID d'une association (Diplôme, Semestre)
    - Des notes diverses et variées

    J'ai également les tables : ETUDIANTS, DIPLOME_SEMESTRE, SEMESTRE, et DIPLOME.

    Il y a une relation 1 - n entre :
    ETUDIANTS - RESULTATS
    DIPLOME_SEMESTRE - RESULTATS
    SEMESTRE - DIPLOME_SEMESTRE
    DIPLOME - DIPLOME_SEMESTRE


    La requête suivante permet d'afficher toutes les infos qui m'intéressent, sauf le nombre de RESULTATS par étudiant et diplôme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT ETU_NOM, ETU_PRENOM, SEM_LIBELLE, DIP_LIBELLE, RES_MOYENNE_CC, RES_NOTE_EXAM, RES_NOTE_FINALE, RES_DECISION_JURY
     
    FROM RESULTATS
    JOIN ETUDIANTS ON RES_ETU_ID = ETU_ID
    JOIN DIPLOME_SEMESTRE ON RES_DS_ID = DS_ID
    JOIN DIPLOME ON DIP_ID = DS_DIP_ID
    JOIN SEMESTRE ON SEM_ID = DS_SEM_ID
    Pour avoir le nombre de RESULTATS par étudiant et diplôme, je n'ai rien essayé de concluant, parce que je sais qu'un simple COUNT(RES_ID) va m'obliger à inclure tous mes autres champs utilisés (ETU_NOM, ETU_PRENOM, SEM_LIBELLE, DIP_LIBELLE, RES_MOYENNE_CC, RES_NOTE_EXAM, RES_NOTE_FINALE, RES_DECISION_JURY) dans mon GROUP BY.
    Or, je voudrais grouper uniquement par étudiant puis par diplôme, tout en visualisant les autres infos (semestre, notes, etc). J'imagine donc que si c'est possible, ça nécessite de complexifier beaucoup plus ma requête d'origine, et je n'ai aucune idée de comment m'y prendre, quoi chercher, etc...
    Tout ce que j'ai essayé de plus fantaisiste n'a rien donné, parce que mes requêtes n'étaient pas correctes : sous-requêtes, etc ... D'ailleurs, je me demande si une sous-requête peut m'aider, parce que de ce que je comprends, je dois l'inclure dans un WHERE, ce qui consiste donc à filtrer une partie de mes résultats, ce qui n'est pas du tout mon intention.

    Est-ce que c'est plus clair ?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Si tu utilises SQL Server, tu as la possibilité d'employer les fonctions de regroupement fenêtrées.
    Tu peux donc ajouter directement dans ta requête l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COUNT(res_id) OVER (PARTITION BY etu_id, dip_id)
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup, c'est exactement ça qu'il me fallait !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de Count...grand débutant
    Par petitours dans le forum Access
    Réponses: 3
    Dernier message: 08/02/2006, 14h53
  2. utilisation de count(*) en condition
    Par clemsouz dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/09/2005, 14h32
  3. utilisation de count(*) en condition
    Par clemsouz dans le forum Langage SQL
    Réponses: 12
    Dernier message: 26/09/2005, 14h29
  4. [xsl]utilisation du count
    Par Grimaud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 28/07/2005, 10h09
  5. Pb de COUNT et GROUP BY simple mais sans requête imbriquées
    Par vanquish dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/10/2004, 09h45

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