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 :

[Debutante] Problème "Count" et "Distinct"


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [Debutante] Problème "Count" et "Distinct"
    Bonjour,

    Je dois réaliser une requête en SQL :
    Afficher le nombre de responsables par secteur
    en sachant que l'on dispose de deux tables :
    - SECTEUR (NomSecteur, NoSecteur)
    - MEMBRE (NoMembre, #NoRespMembre, #NoSecteur)
    avec NoRespMembre appartenant à NoMembre.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Pourriez-vous nous présenter une ébauche de la requête que vous tentez de mettre au point.
    Cela sera plus facile pour vous aider à la faire évoluer.
    En précisant le SGBD que vous utilisez et sa version, les réponses proposées seront adaptées aux spécificités et limitations de celui-ci.
    Règles du forum Langage SQL à lire par tous

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Pour ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT NoSec, COUNT (NoAdh)
    FROM Adherent
    WHERE NOT EXISTS (SELECT NoAdhResp FROM Adherent)
    GROUP BY NoSec;
    ou j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT NoSec, COUNT(NoAdhResp)
    FROM Adherent
    GROUP BY NoSec;
    mais ça n'affiche justement les adhérents qui ne sont pas responsables.

    J'utilise Microsoft Access 2007.

    Merci d'avance

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 879
    Points : 53 057
    Points
    53 057
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT #NoSecteur, COUNT(DISTINCT #NoRespMembre)
    FROM   MEMBRE
    GROUP  BY #NoSecteur
     
    -- pour avoir le secteur en clair : ajouter une jointure
    SELECT #NomSecteur, COUNT(DISTINCT #NoRespMembre)
    FROM   MEMBRE M
           INNER JOIN SECTEUR S
                 M.#NoSecteur = S.NoSecteur
    GROUP  BY #NoSecteur
    A +

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    Dans SQL Access, <Distinct Count> n'existe pas, il faut donc 2 requêtes :
    1) Regrouper les responsables par secteur pour éviter les doublons
    2) Compter les responsables par secteur

    Ou regrouper le tout en une seule via une sous-requête dans la clause From :
    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
     
    SELECT
     secteur.NomSecteur,
     COUNT(R1.NoRespMembre) AS CompteResp
    FROM
     [
    SELECT
     NoSecteur,
     NoRespMembre
    FROM
     Membre
    GROUP BY
     NoSecteur,
     NoRespMembre]. AS R1
    INNER JOIN
     secteur
     ON
      R1.NoSecteur=secteur.NoSecteur
    GROUP BY
     secteur.NomSecteur;
    ou une sous-requête pour faire le Distinct Count :
    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
     
    SELECT
     Membre.NoSecteur,
     (
    SELECT
     COUNT(NoRespMembre)
    FROM
     (
    SELECT DISTINCT
     NoSecteur,
     NoRespMembre
    FROM
     Membre AS R1)
    WHERE
     R1.NoSecteur=Membre.NoSecteur) AS CompteResp
    FROM
     Membre
    GROUP BY
     Membre.NoSecteur;
    Cordialement,

    Philippe

    Dans le cas particulier ou NoMembre = NoRespMembre pour tous les responsables, c'est à dire que les responsables sont responsable d'eux-même , la requete peut se simplifier ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT
     NoSecteur,
     COUNT(NoRespMembre) AS CompteResp
    FROM
     Membre
    WHERE
     NoMembre=[NoRespMembre]
    GROUP BY
     NoSecteur;

Discussions similaires

  1. Problème avec count(distinct)
    Par habasque dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/10/2009, 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