Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2659 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Calculer un pourcentage dans une requete

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Calculer un pourcentage dans une requete

n°2042383
Jarod511
****
Posté le 15-12-2010 à 15:43:15  profilanswer
 

Bonjour,
 
Je me permets de poster un message sur le forum car j'ai un petit souci dans ma requête SQL. Je voudrais afficher le pourcentage de réponse oui dans mon SELECT et j'y arrive pas.
 
Pour le moment ma requete m'affiche les résultats suivants :
 
Compte ICD | Reponse | Code
2               | NON      | C76.4
5               | OUI       | C76.4
3               | OUI       | C26.9
 
ce que je voudrais c'est afficher une colonne supplémentaire qui serait de la façon suivante :
 
Compte ICD | Reponse | Code | Pourcentage oui
2               | NON      | C76.4 |
5               | OUI       | C76.4 | 71.42
3               | OUI       | C26.9 | 100
 
Ma table se structure de la façon suivante :
 
RESOURCE :
 
ID_RES | ICD | CONSENT | SAMPLE_DATE
 
Ma requête est la suivante :
 

Code :
  1. SELECT
  2.   count(RES.ICD) AS "Compte CODE en 2010",
  3.   RES.CONSENT AS "reponse",
  4.   RES.ICD AS "CODE"
  5. FROM
  6.   RESOURCE RES
  7. WHERE
  8.   trunc(RES."SAMPLE_DATE", 'DD') > TO_DATE('10/12/2010', 'DD-MM-YYYY')
  9.   AND RES.ICD IS NOT NULL
  10.   GROUP BY (RES.ICD, RES.CONSENT)
  11. ORDER BY
  12.   RES.ICD


 
Est ce que quelqu'un aurait une idée de comment faire pour afficher cette colonne pourcentage ?
 
Merci d'avance.

mood
Publicité
Posté le 15-12-2010 à 15:43:15  profilanswer
 

n°2042396
olivthill
Posté le 15-12-2010 à 15:57:10  profilanswer
 

Quelle base de données ? Access ? MySQL ? SQL Server ? Oracle ? Sybase ?
 
Si je comprends bien, le pourcentage est le nombre de OUI divisé par le nombre total de réponses.
On peut facilement obtenir ce nombre total après avoir déjà fait la requête des réponses.
Mais faire les deux choses en même temps est beaucoup plus compliqué. Cela, nécessite au moins de faire une sous-requête, mais je ne sais pas si c'est possible avec votre moteur de base de données.
Pourquoi ne pas séparer la requête des réponses et le calcul du pourcentage ?

n°2042418
Jarod511
****
Posté le 15-12-2010 à 16:22:17  profilanswer
 

Bonjour Olivthill,
 
Merci pour ta réponse. Oui c'est bien ça le pourcentage est le nombre de OUI divisé par le nombre total de réponses pour chaque code.  
 
Effectivement, j'avais pensé à faire un sous requête mais sans succès. Je pense que c'est possible sous Oracle mais j'y suis pas arrivé.
 
Pourrais tu me développer un peu plus ton idée de séparer la requête des réponses et le calcul du pourcentage ?
 
Encore merci pour ton aide.

n°2043325
dlaumor
Posté le 20-12-2010 à 17:14:25  profilanswer
 

Il faut faire une première requête qui ramènera le total (tu mets le code, et une somme sur le total des réponses elle sera utilisée comme "une table" source
 

Code :
  1. SELECT
  2.   count(RES.ICD) AS "Total Compte CODE en 2010",
  3.   RES.ICD AS "CODE"
  4. FROM
  5.   RESOURCE RES
  6. WHERE
  7.   trunc(RES."SAMPLE_DATE", 'DD') > TO_DATE('10/12/2010', 'DD-MM-YYYY')
  8.   AND RES.ICD IS NOT NULL
  9.   GROUP BY (RES.ICD)


 
Ensuite ta requete existante dans laquelle tu rajoutes le champs calculés en faisant ta jointure sur le code.
 
Essaye la requete ci-dessous
 

Code :
  1. SELECT
  2.   count(RES.ICD) AS "Compte CODE en 2010",
  3.   RES.CONSENT AS "reponse",
  4.   RES.ICD AS "CODE",
  5.   count(RES.ICD) / TOT.SOMME AS POURCENTAGE
  6. FROM
  7. RESOURCE RES
  8. INNER JOIN
  9. (
  10.      SELECT count(RES.ICD) AS "SOMME"
  11.                , RES.ICD AS "CODE"
  12.      FROM RESOURCE RES
  13.      WHERE  trunc(RES."SAMPLE_DATE", 'DD') > TO_DATE('10/12/2010', 'DD-MM-YYYY')
  14.                 AND RES.ICD IS NOT NULL
  15.      GROUP BY (RES.ICD)
  16. ) AS TOT
  17. ON (RES.CODE = TOT.CODE)
  18. WHERE
  19.   trunc(RES."SAMPLE_DATE", 'DD') > TO_DATE('10/12/2010', 'DD-MM-YYYY')
  20.   AND RES.ICD IS NOT NULL
  21.   GROUP BY (RES.ICD, RES.CONSENT)
  22. ORDER BY
  23.   RES.ICD


Message édité par dlaumor le 20-12-2010 à 17:15:26
n°2043433
Jarod511
****
Posté le 21-12-2010 à 09:20:23  profilanswer
 

Bonjour dlaumor,
 
Merci beaucoup pour ton aide. Je ne savais pas que l'on pouvais imbriquer une requête select dans un inner join. Super ! Merci encore.

n°2043457
dlaumor
Posté le 21-12-2010 à 11:18:49  profilanswer
 

Une autre solution aurait été de créer une vue avec la première requête et de faire ta jointure sur la vue, ça revenait au même ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Calculer un pourcentage dans une requete

 

Sujets relatifs
Help pour une requeteFormulaire et requete SQL
Création d'une requête SQLAppliquer deuxième tri à une requête sql
Requête SQL pour un unique idLIKE dans une Requête paramétrée ACCESS
Problème de requêteRequete SQL sur date PHP
pb de requete sur plusieurs tablesAffichage requête SQL et evènement tout les X enregistrement
Plus de sujets relatifs à : Calculer un pourcentage dans une requete


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR