Case et count(distinct())
Bonjour,
je viens de découvrir la fonction Case couplée à un agréga qui permet de faire des choses du type :
Code:
1 2 3 4 5 6
| select id_dept, SUM(nb_sejours),
SUM(CASE WHEN e.statut = 'pub' THEN nb_sejours ELSE 0 END) nb_sejours_pub,
SUM(CASE WHEN e.statut = 'priv' THEN nb_sejours ELSE 0 END) nb_sejours_priv
from hospitalisation h
inner etablissement e on e.id_etablissement = h.id_etablissement
group by id_dept; |
sachant que mes tables sont de la forme :
Code:
1 2
| hospitalisation (id_temps, id_etablissement, id_pathologie,...,nb_sejours)
etablissement (id_etablissement,..., statut,...) |
Imaginons que j'ai une table de travail contenant pour chaque hospitalisation, l'identifiant du patient, celui de l'établissement ainsi que d'autre données.
Code:
venues (id_temps, id_patients, id_etablissement,...)
Je souhaite connaitre le nombre de patients pris en charge dans les établissments privés ainsi que le nombre de patients pris en charge dans les établissments publics.
Jusqu'à présent, je faisais deux requêtes dont je retravaillais les résultats :
Code:
1 2 3 4 5 6 7 8 9 10 11
| select id_dept, count(distinct(id_patients)) as nb_patients_pub
from venues v
inner etablissement e on e.id_etablissement = v.id_etablissement
where e.statut='pub'
group by id_dept;
select id_dept, count(distinct(id_patients)) as nb_patients_priv
from venues v
inner etablissement e on e.id_etablissement = v.id_etablissement
where e.statut='priv'
group by id_dept; |
Est'il possible, à votre avis, d'avoir en une seule requête un résultats du type
id_dept,nb_patients_pub,nb_patients_priv
01,100,150
02,11,22
03,45,75
...
Merci d'avance