Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/12/2010, 12h31   #1
Membre à l'essai
 
Inscription : janvier 2006
Messages : 120
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 120
Points : 24
Points : 24
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 :
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
Jarod51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 14h43   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 15h01   #3
Membre à l'essai
 
Inscription : janvier 2006
Messages : 120
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 120
Points : 24
Points : 24
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.
Jarod51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 18h18   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 463
Points : 10 463
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Avec la fonction RATIO_TO_REPORT :
Code :
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
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 09h23   #5
Membre à l'essai
 
Inscription : janvier 2006
Messages : 120
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 120
Points : 24
Points : 24
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.
Jarod51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 10h55   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 463
Points : 10 463
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/12/2010, 14h25   #7
Membre à l'essai
 
Inscription : janvier 2006
Messages : 120
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 120
Points : 24
Points : 24
Merci Waldar pour l'explication, elle m'est très utile. Tout fonctionne parfaitement.

Merci beaucoup pour l'aide .
Jarod51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h22.


 
 
 
 
Partenaires

Hébergement Web