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

Access Discussion :

Requête et sous requête


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 33
    Points : 22
    Points
    22
    Par défaut Requête et sous requête
    Salut tout le monde, je galère sur une opération mathématique :

    Je voudrais calculer la proportion d'auto-entrepreneurs par département dans une région donnée : c'est le rapport entre le nombre d'auto-entrepreneurs et le nombre total d'entrepreneurs de chaque secteur


    J'ai fait intervenir les 8 tables suivantes :

    industrie, construction, service, ap, commune, dpt, region et autoEtp_dpt.

    - region contient une clé étrangère dans dpt
    - dpt contient une clé étrangère dans commune et dans autoEtp_dpt
    -commune contient une clé étrangère dans industrie, construction, service et ap

    -autoEtp_dpt contient la colonne "total_11" : nombre total d'auto entreprises par département
    -industrie, construction, service, ap ont chacune la colonne "creation_etp_11" qui contien le nombre d'entrepreneur de chaque secteur

    Cela revient donc à calculer (total_11 de autoEtp_dpt) / (creation de industrie+creation de construction+ creation de service + creation de ap)

    ... le tout groupé par département (les départements d'une région précise et non au niveau national)


    J'ai essayé la requête ci-dessous, le calcul se fait mais le résultat est faux, pourtant en exécutant le numérateur et le dénominateur séparément, j'obtiens les bons chiffres de chaque partie.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT
     
    a6.libelle_dpt  as 'département',
     
    (SELECT sum(a7.total_11) FROM dpt a6 , autoetp_dpt a7, region a8 
    WHERE a7.id_dpt=a6.id_dpt and a6.id_region=a8.id_region and a8.id_region=16 )/ 
    sum(a1.creation_etp_11+a2.creation_etp_11+a3.creation_etp_11+a4.creation_etp_11) as 'prop hors auto-entreprise'
     
    FROM industrie a1, construction a2, service a3, ap a4, commune a5, dpt a6, region a8
     
    WHERE a1.id_commune=a5.id_commune and a2.id_commune=a5.id_commune and a3.id_commune=a5.id_commune and 
    a4.id_commune=a5.id_commune and a5.id_dpt=a6.id_dpt and a6.id_region=a8.id_region and a8.id_region=16
     
    GROUP BY a6.libelle_dpt

    J'espère trouver de l'aide sur ce forum
    Merci

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 745
    Points : 57 560
    Points
    57 560
    Billets dans le blog
    42
    Par défaut
    salut toute seule,

    Citation Envoyé par gaellegeek
    le calcul se fait mais le résultat est faux, pourtant en exécutant le numérateur et le dénominateur séparément, j'obtiens les bons chiffres de chaque partie.
    voilà qui est mystérieux, Access ne saurait plus faire une division à partir d'un numérateur et un dénominateur correct ?
    Un truc doit nous échapper, il faudrait détailler tes résultats, donner cette/ces requête(s) qui donnent pourtant les bons numérateurs et dénominateurs.

    Ils n'y auraient pas des enregistrements où les champs total_11 et creation_etp_11 seraient à Null par hasard ? (il en suffit d'un seul pour fiche la pagaille dans les calculs comme cette fois où j'ai pu constater que Sum(A+B)<>Sum(A)+Sum(B))

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    Salut f-leb,

    Merci d'avoir pris le temps de répondre à ma doléance, j'ai finalement pu régler le problème tout simplement en mettant le numérateur et le dénominateur en sous requête pour ensuite diviser le premier par le second grâce à cet notion magique qu'on appelle 'encapsulation'

    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
    29
    30
    31
    32
    33
    SELECT autoEtp.libelle_dpt, nbAutoEtps, nbEtps, nbAutoEtps/nbEtps * 100
    FROM [SELECT a6.libelle_dpt
         , sum(a7.total_11) as nbAutoEtps
      FROM [dpt]         a6
         , [autoetp_dpt] a7
         , [region]      a8
     
     WHERE a7.id_dpt    = a6.id_dpt
       AND a6.id_region = a8.id_region
       AND a8.id_region = 16
     GROUP BY a6.libelle_dpt]. AS autoEtp, [SELECT a6.libelle_dpt
         , sum( a1.creation_etp_11
              + a2.creation_etp_11
              + a3.creation_etp_11
              + a4.creation_etp_11 ) as nbEtps
      FROM [industrie]    a1
         , [construction] a2
         , [service]      a3
         , [ap]           a4
         , [commune]      a5
         , [dpt]          a6
         , [region]       a8
     
     WHERE a1.id_commune = a5.id_commune
       AND a2.id_commune = a5.id_commune
       AND a3.id_commune = a5.id_commune
       AND a4.id_commune = a5.id_commune
       AND a5.id_dpt     = a6.id_dpt
       AND a6.id_region  = a8.id_region
       AND a8.id_region = 16
     
     GROUP BY a6.libelle_dpt]. AS Etp
    WHERE AutoEtp.libelle_dpt=Etp.libelle_dpt;
    C'est beau non?

    Allez merci encore

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

Discussions similaires

  1. Requête et sous requête
    Par 501darts dans le forum Développement
    Réponses: 1
    Dernier message: 21/02/2008, 10h53
  2. intégré une sous requête dans une requête
    Par Smix007 dans le forum SQL
    Réponses: 13
    Dernier message: 25/06/2007, 11h45
  3. inclure une sous requête dans une requête
    Par garsflo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/05/2007, 19h12
  4. Requête et sous requête avec SELECT et UPDATE
    Par Véronique75ca dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 29/06/2006, 21h25
  5. Requêtes et sous requêtes
    Par lau2nyce dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2004, 15h14

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