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 :

[debutant] requete sql


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [debutant] requete sql
    Bonjour

    Je commence les base de données ef je travaille avec postgre.
    J ai une entité medecin qui a comme attributs :
    - nom
    - matricule (clé primaire)
    - specialité

    et une entité specialité qui a comme attribut
    - nomspé (clé primaire)

    j aimerai faire UNE requete qui permet de compté le nombre de medecins pour chque spécialité. Par exemple :

    Chirurgien 12
    Pediatre 8
    Ophtalmo 5
    etc ...

    j arrive a le faire avec plusieurs requete mais je me demande si c'est ossible de le faire en une seule requête.

    Merci a vous

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select specialite, count(matricule)
    from medecin
    group by specialite
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup!!
    mais j aimerai que ca marque 0 pour les autre specialités.

  4. #4
    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
    Jointure externe avec la table des spécialités,et si cela n'existe pas sous postgre, une union.
    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

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    tu ne pourrais pas me mettre la requete, je ne vois pas ce que tu veux dire
    merci.

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT specialite, COUNT(matricule)
    FROM Specialite s, Medecin m
    WHERE s.IdSpecialite = m.IdSpecialite(+)
    GROUP BY Specialite
    C'est le (+) qui indique la jointure externe, il est possible que postgre utilise une autre syntaxe (peut-être la norme : LEFT OUTER JOIN)
    Si la jointure externe n'existe pas il reste la solution de l'union :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT specialite, COUNT(matricule)
    FROM Specialite s, Medecin m
    WHERE s.IdSpecialite = m.IdSpecialite
    GROUP BY Specialite
    UNION ALL
    SELECT Specialite, 0
    FROM Specialite s
    WHERE NOT EXISTS (SELECT NULL FROM Medecin WHERE  IdSpecialite = s. IdSpecialite);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT specialite, COUNT(matricule)
    FROM Specialite s, Medecin m
    WHERE s.IdSpecialite = m.IdSpecialite
    GROUP BY Specialite
    UNION ALL
    SELECT Specialite, 0
    FROM Specialite 
    WHERE IdSpecialite NOT IN (SELECT IdSpecialite  FROM Medecin);
    Mais c'est pas mal de chercher soi-même ce qu'est une jointure externe, sur developpez.net par exemple, ou sur la doc postgre.
    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

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    voila ce que j ai fait :

    SELECT specialité.nomspé, COUNT(medecin.matricule)
    FROM specialité
    LEFT OUTER JOIN medecin ON specialité.nomspé = medecin.specialité
    GROUP BY specialité.nomspé;


    Et... Ca marche !!!!!

    Merci pour votre aide !!!

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    meme avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT specialité.nomspé, COUNT(medecin.matricule) 
    FROM specialité 
    LEFT JOIN medecin ON specialité.nomspé = medecin.specialité 
    GROUP BY specialité.nomspé;
    ca marche

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

Discussions similaires

  1. [debutant]Requete sql sur un Mpd
    Par racoboss dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/02/2008, 16h34
  2. [DEBUTANT] Requete SQL avec DISTINCT
    Par Faiche dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/11/2007, 12h31
  3. [debutant] Problème requete SQL et driver JDBC
    Par desquesa dans le forum JDBC
    Réponses: 2
    Dernier message: 29/05/2006, 13h19
  4. [C#][Débutant] Comment récuperer une valeur d'une requete sql
    Par Cazaux-Moutou-Philippe dans le forum Accès aux données
    Réponses: 2
    Dernier message: 12/05/2006, 01h45
  5. [Debutant]Requete SQL nb occurences
    Par Zetmurin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/10/2005, 11h28

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