Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
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 19/05/2011, 12h33   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 14
Points : 3
Points : 3
Par défaut Calcul group by

Bonjour,

Je suis devant un mur, je ne parviens pas à trouver la solution à mon problème.

Voici mes tables :

Code :
1
2
3
4
DISPO-INTERCO
id
idorganisme
etatLien (valeurs OK ou NOK)
et

Code :
1
2
3
ORGANISME
idOrganisme
nomOrganisme
Je dois retourner une table avec nomOrganisme et etatLien OK divisé par etatLien NOK (pour cet organisme)

Voici ma requête :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT Organisme.nomOrganisme AS Organisme,
       cast(
          cast(
          (count(DispoInterco.etatLien)
          ) * 100 AS numeric(10,2))
           /
             (cast(
                (SELECT count(DispoInterco.etatLien)
                 FROM DispoInterco, Organisme
                 WHERE DispoInterco.idCPIPCDOrganisme=CPIPCDOrganisme.idCPIPCDOrganisme
                ) AS numeric(10,2))
             )
           AS numeric(4,2)
           )
        AS Taux
        FROM DispoInterco, Organisme
        WHERE DispoInterco.idOrganisme=Organisme.idOrganisme
        AND DispoInterco.etatLien='OK'
GROUP BY Organisme
Le problème, c'est que ma requête intérieure me retourne le résultat pour tous les organismes, et non pas pour celui "en cours" dans le group by...

Si quelqu'un a une piste ?

Merci d'avance !
Mathias77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 16h53   #2
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
Peut-être qu'une approche plus simple serait une requête du genre:
Code :
1
2
3
4
5
6
7
8
9
SELECT
 colonne,
 sum(case when champ='OK'  then 1 else 0 end) /
 sum(case when champ='NOK'  then 1 else 0 end),
FROM
 TABLES
WHERE conditions
GROUP BY
 colonne;
Attention à la division par zéro, évitable si nécessaire avec une clause HAVING derrière le GROUP BY pour éliminer les cas où le diviseur serait zéro.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/05/2011, 11h22   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 14
Points : 3
Points : 3
Génial, ça marche !

Merci !!!
Mathias77 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 19h40.


 
 
 
 
Partenaires

Hébergement Web