Aide urgente SVP pour la correction d'une requête !

Aide urgente SVP pour la correction d'une requête ! - SQL/NoSQL - Programmation

Marsh Posté le 05-06-2015 à 14:45:13    

Bonjour tout le monde, ça fait un moment que j'essaye d'écrire une requette qui affichera un pourcentage par champs,  
 
j'ai 2 tables:      - FORM(id_form, id_utilisateur, service, libelle, date, nombre, cout, bilan..)
                      - UTILISATEUR(id_utilisateur, nom)
 
ce que je voudrais c'est afficher le pourcentage des valeurs nulles dans les colonnes : 'nombre', 'cout', 'bilan', 'date', au même temps dans quel 'service' et par quel 'utilisateur' !!
 
jusqu'à présent j'arrive à tester champs par champs et service par service tout en donnant le pourcentage total par service (sans prendre en considération l'utilisateur) et le pourcentage total par service et par chaque utilisateur, avec la requête suivante qui marche bien sur :  
 
 SELECT distinct(select distinct(((SELECT COUNT( * )FROM FORM WHERE DATE_DEBUT IS NULL and CD_SERVICE='a' )*100 /(SELECT COUNT( * )FROM FORM where CD_SERVICE='a'))) from FORM) AS Totale_a,
(select distinct(((SELECT COUNT( * )FROM FORM WHERE DATE_DEBUT IS NULL and SERVICE='a' and ID_UTIL_ASSIST=318980 )*100 /(SELECT COUNT( * )FROM FORM where SERVICE='a' and ID_UTIL_ASSIST=318980)))  from FORM) AS x ,
(select distinct(((SELECT COUNT( * )FROM FORM WHERE DATE_DEBUT IS NULL and SERVICE='a' and ID_UTIL_ASSIST=363824 )*100 /(SELECT COUNT( * )FROM FORM where SERVICE='a' and ID_UTIL_ASSIST=363824)))  from FORM) AS y,
(select distinct(((SELECT COUNT( * )FROM FORM WHERE DATE_DEBUT IS NULL and SERVICE='a' and ID_UTIL_ASSIST=363819 )*100 /(SELECT COUNT( * )FROM FORM where SERVICE='a' and ID_UTIL_ASSIST=363819)))  from  FORM) AS z
from FORM;
 
 
quelqu'un aurait une idée ? :??:  
 
 
merci par avance  :)

Reply

Marsh Posté le 05-06-2015 à 14:45:13   

Reply

Marsh Posté le 09-06-2015 à 17:39:48    

Salut,
 
Quand je fais ce genre de stats, je passe par ce type de requête :  
 
select
UT.id_utilisateur
, UT.nom
, FO.service
, sum(case when nombre is null then 1 else 0 end) / count(*) as pc_nombre_null
, sum(case when cout is null then 1 else 0 end) / count(*) as pc_cout_null
...
from  
FORM FO
inner join UTILISATEUR UT on UT.id_utilisateur = FO.id_utilisateur
group by  
UT.id_utilisateur
, UT.nom
, FO.service
 
--j'ai ajouté l'id_utilisateur dans le select et dans le group by pour éviter le cas ou plusieurs utilisateurs aient le même nom.
 
si tu as besoin d'un niveau de regroupement différent (par service sans prendre en compte l'utilisateur par exemple), je pense qu'il vaut mieux faire une seconde requête...


Message édité par Tibar le 09-06-2015 à 17:43:22
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed