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

SQL Oracle Discussion :

Calculer un poucentage


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Par défaut Calculer un poucentage
    Bonjour,

    Je voudrais si il est possible de pouvoir afficher dans une nouvelle colonne le calcul du pourcentage en fonction des données que j'affiche. En fait, je voudrais afficher le pourcentage de oui pour un code donné. Le problème c'est que je ne vois pas comment m'y prendre dans une seule requête, si quelqu'un peut m'aider, merci.

    Voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select
      count(RES.ICD) as "Compte CODE en 2010", 
      decode(RES.CONSENT, '1', 'Oui', '0', 'Non') as "reponse",
      RES.ICD as "CODE"
    from
      RESOURCE RES
    where
      trunc(RES."SAMPLE_DATE", 'DD') > TO_DATE('10/12/2010', 'DD-MM-YYYY')
      and RES.ICD is not null
      GROUP by (RES.ICD, RES.CONSENT)
    order by
      1

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    decode, trunc, TO_DATE... c'est pas du SQL normalisé ça !

    Quel est le SGBD utilisé ?
    Quelle est la structure de la table ?

    Bref, respectez les règles de ce forum.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Par défaut
    Bonjour CinePhil,

    Je suis sur Oracle 10g, je fais mes requêtes sur des vues.

    La structure de ma table est la suivante :

    Resource :
    ID_RES | ICD | CONSENT | SAMPLE_DATE

    Le résultat que j'obtiens est le suivant :

    Compte ICD | Reponse | Code
    2 | NON | C76.4
    5 | OUI | C76.4
    3 | OUI | C26.9

    En fait, ce que je voudrais faire c'est mettre une nouvelle colonne pourcentage me donnant le pourcentage de OUI par code.

    Compte ICD | Reponse | Code | Pourcentage oui
    2 | NON | C76.4 |
    5 | OUI | C76.4 | 71.42
    3 | OUI | C26.9 | 100

    A oui désolé, j'ai pas fais attention en postant mon message que je n'étais pas dans la bonne catégorie. Serait il possible de migrer mon message dans la catégorie Oracle?


    Merci pour votre réponse.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Avec la fonction RATIO_TO_REPORT :
    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
    With RES as
    (
    select 1 as id_res, 'C76.4' as icd, '0' as consent, sysdate as sample_date from dual union all
    select 2          , 'C76.4'       , '0'           , sysdate                from dual union all
    select 3          , 'C76.4'       , '1'           , sysdate                from dual union all
    select 4          , 'C76.4'       , '1'           , sysdate                from dual union all
    select 5          , 'C76.4'       , '1'           , sysdate                from dual union all
    select 6          , 'C76.4'       , '1'           , sysdate                from dual union all
    select 7          , 'C76.4'       , '1'           , sysdate                from dual union all
    select 8          , 'C26.9'       , '1'           , sysdate                from dual union all
    select 9          , 'C26.9'       , '1'           , sysdate                from dual union all
    select 10         , 'C26.9'       , '1'           , sysdate                from dual
    )
      select count(*) as "Compte CODE en 2010", 
             case res.consent
               when '1' then 'Oui'
               when '0' then 'Non'
             end as "reponse",
             res.icd as "CODE",
             case res.consent
               when '1'
               then round(100*RATIO_TO_REPORT(count(*)) OVER (partition by res.icd), 2)
             end as "Pourcentage Oui"
        from res
       where trunc(res.sample_date, 'DD') > to_date('10/12/2010', 'DD-MM-YYYY')
         and res.icd is not null
    group by res.icd, res.consent
    order by res.consent asc, count(res.icd) desc;
     
    Compte CODE en 2010 rep CODE  Pourcentage Oui
    ------------------- --- ----- ---------------
                      2 Non C76.4                
                      5 Oui C76.4           71.43
                      3 Oui C26.9             100

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Par défaut
    Bonjour Waldar,

    Merci beaucoup pour votre réponse. Par contre, pourriez vous m'expliquer la ligne WITH. En fait, pour le moment je n'ai que 2 codes C76.4 et C26.9 pour ma batterie de tests. Le problème c'est que ces valeurs vont évoluer dans le temps et vont être différentes.

    Est il possible de généraliser la clause With pour tous les codes présent dans la table?

    Merci encore pour votre réponse.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Le WITH c'est juste pour simuler un jeu d'essai afin que tout le monde puisse tester avec un simple copier/coller.

    Comme vous avez une table, vous n'en avez pas besoin.

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

Discussions similaires

  1. [XL-2007] Calcule de poucentage d'heure et vices et versa
    Par mitsue dans le forum Excel
    Réponses: 10
    Dernier message: 19/11/2012, 14h24
  2. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09
  3. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29
  4. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  5. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45

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