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 :

Comptage et calcul de moyenne


Sujet :

Langage SQL

  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut Comptage et calcul de moyenne
    Bonjour,

    Je dois parcourir une table pour une année précise et calculer le nombre de garcon et de fille par secteur ainsi que le pourcentage que cela represente

    Soit par exemple :

    Année 2009 | Secteur 1 | 15 G | X1% | 11 F | Y1 %
    Année 2009 | Secteur 2 | 10 G | X2% | 14 F | Y2 %

    Le comptage suivant le secteur est fait , reste le calcul du %

    Ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT  NVL(j3.acad_per_id,' ') AS acad_per_id__1,
            NVL(j0.industry_branch,' ') AS secteur,
            j10.sex,
            count(j10.sex) AS sexe
    from ....
    INNER JOIN  ....
    LEFT OUTER JOIN ...
    LEFT OUTER JOIN .....
    INNER JOIN ...
    .....
    where .....
    Group by j3.acad_per_id,j0.industry_branch,j10.sex
    quelqu'un a une idée ?

    Merci

  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 801
    Points
    30 801
    Par défaut
    Citation Envoyé par beegood Voir le message
    Je dois parcourir une table pour une année précise et calculer le nombre de garcon et de fille par secteur ainsi que le pourcentage que cela represente
    Le pourcentage par rapport à quel total ?
    Avec quel SGBD ? Prend-il en charge les fonctions de regroupement analytique ?
    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 éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Bonjour,

    en effet, je ne l'ai pas bien précisé:

    c'est sur le total pour l'année

    Sinon je suis en Oracle 10G

    Merci

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Votre explication n'est pas très claire.
    Quelque chose comme ça devrait vous aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Select 
           annee,
           secteur,
           sum(CASE WHEN sex = 'G' THEN 1 ELSE 0 END) AS nb_garcon,
           (sum(CASE WHEN sex = 'G' THEN 1 ELSE 0 END)/count(*))*100 AS pct_garcon
    FROM ...

  5. #5
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Bonjour,

    Cela ne donne malheuresement pas le résultat attendu , j'ai ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT  NVL(j3.acad_per_id,' ') AS periode_academique,
             NVL(j0.industry_branch,' ') AS secteur,
            j10.sex AS sexe,
             sum(CASE WHEN j10.sex = 'M' THEN 1 ELSE 0 END) AS nb_garcon,
            (sum(CASE WHEN j10.sex = 'M' THEN 1 ELSE 0 END)/count(*))*100 AS pct_garcon
    from .......
    where t.status='N' .....
    Group by j3.acad_per_id,j0.industry_branch,j10.sex
    Order by j3.acad_per_id,j0.industry_branch,j10.sex
    ....
    2008-2009GE DIST/COM F 0 0
    2008-2009GE DIST/CO M 2 100
    2008-2009GE ED/PR/IM F 0 0
    2008-2009GE EDUCATION M 1 100
    2008-2009GE FINANCE F 0 0
    .....
    - Je cherche à avoir sur une même ligne F et M par année , secteur
    - Le % de F et M par année et secteur

    Merci de votre aide

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il suffit d'enlever le j10.sex dans le select et le group by, de rajouter les deux mêmes formules pour les filles, et de corriger le group by :
    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
    SELECT
        NVL(j3.acad_per_id,' ') AS periode_academique,
        NVL(j0.industry_branch,' ') AS secteur,
        sum(CASE WHEN j10.sex = 'M' THEN 1 ELSE 0 END) AS nb_garcon,
        (sum(CASE WHEN j10.sex = 'M' THEN 1 ELSE 0 END)/count(*))*100 AS pct_garcon,
        sum(CASE WHEN j10.sex = 'F' THEN 1 ELSE 0 END) AS nb_fille,
        (sum(CASE WHEN j10.sex = 'F' THEN 1 ELSE 0 END)/count(*))*100 AS pct_fille
    FROM
        ...
    WHERE
        t.STATUS = 'N' ...
    GROUP BY
        NVL(j3.acad_per_id,' '),
        NVL(j0.industry_branch,' ')
    ORDER BY
        NVL(j3.acad_per_id,' ') ASC,
        NVL(j0.industry_branch,' ') ASC

  7. #7
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Bonjour,

    Merci pour votre aide.

    J'ai bien ma répartition G / F sur une ligne, le % renvoyé par contre n'est pas celui que je cherche d'espèrement à trouver.

    Pour faire simple pour une année j'ai :

    Secteur 1 25 F -> 25% des filles 75G -> 75% des garcons
    Secteur 2 75 F > 75% des filles 25G -> 25% des garcons
    ----------------------------------
    Total 100F 100G

    Je ne sais pas si cela est possible

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Qu'est-ce qui ne va pas au niveau des pourcentages (avec un exemple de ce qui ne vous va pas au niveau du résultat de la requête) ?

  9. #9
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Voici un exemple :

    2008-2009 BQ/FI/AS 0 0 1 100
    2008-2009GE DIST/COM 2 66,66666666666666666666666666666666666667 1 33,33333333333333333333333333333333333333
    2008-2009 TRANSPOR 7 38,88888888888888888888888888888888888889 11 61,11111111111111111111111111111111111111
    Le pourcentage se fait sur mes données groupés , par sur le global

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Remplacez les deux count(*) en faisant attention aux parenthèses par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count(*) over(partition by NVL(j3.acad_per_id,' '))

  11. #11
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    count(*) over(partition BY NVL(j3.acad_per_id,' '))
    Me renvoi mon nombre de ligne

  12. #12
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Effectivement il manquait une somme :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    With MaTable AS
    (
    select '2008-2009' as peracad, 'BQ/FI/AS' as branch, 'F' as sex from dual union all
    select '2008-2009'           , 'GE DIST/COM'       , 'M'        from dual union all
    select '2008-2009'           , 'GE DIST/COM'       , 'M'        from dual union all
    select '2008-2009'           , 'GE DIST/COM'       , 'F'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'M'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'M'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'M'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'M'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'M'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'M'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'M'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'F'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'F'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'F'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'F'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'F'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'F'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'F'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'F'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'F'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'F'        from dual union all
    select '2008-2009'           , 'TRANSPOR'          , 'F'        from dual
    )
    SELECT
        peracad AS periode_academique,
        branch  AS secteur,
        sum(CASE WHEN sex = 'M' THEN 1 ELSE 0 END) AS nb_garcon,
        round(sum(CASE WHEN sex = 'M' THEN 1 ELSE 0 END) * 100 / sum(count(*)) over(partition by peracad), 2) AS pct_garcon,
        sum(CASE WHEN sex = 'F' THEN 1 ELSE 0 END) AS nb_fille,
        round(sum(CASE WHEN sex = 'F' THEN 1 ELSE 0 END) * 100 / sum(count(*)) over(partition by peracad), 2) AS pct_fille
    FROM
        MaTable
    GROUP BY
        peracad,
        branch
    ORDER BY
        peracad ASC,
        branch  ASC;
     
    PERIODE_ACADEMIQUE	SECTEUR		NB_GARCON	PCT_GARCON	NB_FILLE	PCT_FILLE
    2008-2009		BQ/FI/AS	0		0		1		4.55
    2008-2009		GE DIST/COM	2		9.09		1		4.55
    2008-2009		TRANSPOR	7		31.82		11		50

  13. #13
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Super

    Merci cela fonctionne

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

Discussions similaires

  1. Comptage de dossier et calcul de moyenne
    Par sleepers56 dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 07/02/2010, 21h09
  2. [VBA-E] problème de calcul de moyenne
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/04/2006, 17h13
  3. Programmation Shell avec Red Hat Calcul de moyenne
    Par jcpoulard dans le forum Linux
    Réponses: 3
    Dernier message: 22/02/2006, 22h08
  4. methode qui calcul une moyenne du traffic
    Par siry dans le forum Développement
    Réponses: 7
    Dernier message: 05/05/2005, 17h16
  5. calculer une moyenne avec une requete externe
    Par allowen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2005, 16h02

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