|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Développeur informatique Inscription : avril 2009 Messages : 235 ![]() |
Bonjour à tous,
Je n'arrive pas à calculer un pourcentage en une seule requête qui sera utilisée sur MySQL. En fait, je souhaite récupéré le nombre total de courriers présents dans la base puis le nombre total de courriers traités en 1 semaine. J'ai fait cette requête : Code :
Des suggestions pour m'aider ? Merci d'avance |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 629 ![]() |
Bonjour,
qu'est-ce que ca veux dire "ca fonctionne pas" ? si vous ne présentez pas votre erreur, ni un minimum sur vos tables / données ca ne va pas être facile. quelles sont les différentes valeurs de votre champ "COURRIERTRAITE" possible ? |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Développeur informatique Inscription : avril 2009 Messages : 235 ![]() |
L'erreur est syntaxe invalide ou actuellement non supportée (la requête sera utilisée dans le logiciel BIRT pour pourvoir afficher un graphique dans mon rapport)
Courriertraité est un booléen 1=vrai et 0=faux mais l'erreur vient du calcul au niveau du ROUND je pense. Merci |
|
|
00
|
|
|
#4 | ||
![]() ![]() |
Puisque COURRIERTRAITE est un booléen, il peut s'additionner.
Essaie ceci : Code :
__________________
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 ! |
||
|
10
|
|
|
#5 |
|
Membre du Club
![]() Développeur informatique Inscription : avril 2009 Messages : 235 ![]() |
Ca fonctionne merci beaucoup !!!!
|
|
|
00
|
|
|
#6 | ||
|
Membre du Club
![]() Développeur informatique Inscription : avril 2009 Messages : 235 ![]() |
Cependant, lorsque je veux faire la même chose mais pour la durée de traitement > 1 seconde via cette requête :
Code :
Merci |
||
|
|
00
|
|
|
#7 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 629 ![]() |
là, essayez plutôt quelque chose comme ceci :
Code :
|
||
|
|
10
|
|
|
#8 |
|
Membre du Club
![]() Développeur informatique Inscription : avril 2009 Messages : 235 ![]() |
Merci ça fonctionne parfaitement.
Peux-tu juste m'expliquer cette partie de la requête : Code :
(sum(case when(TEMPSTRAITEMENTCOURRIER > 1) then 1 else 0 end) |
|
|
00
|
|
|
#9 |
![]() ![]() |
Il suffit de lire :
CASE (dans le cas) WHEN (où) TEMPSTRAITEMENTCOURRIER > 1 (le temps de traitement du courrier est supérieur à 1) THEN (alors) 1 ELSE (sinon) 0. Et SUM additionne donc des 0 ou des 1.
__________________
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 ! |
|
10
|
|
|
#10 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 629 ![]() |
En fait ca sert à simuler la solution du d'avant.
Le "case" c'est une clause qui va faire une action ou une autre selon les conditions. Donc là on lui dit : - quand on a "TEMPSTRAITEMENTCOURRIER > 1" alors on prend la valeur 1 - dans les autre cas on prend la valeur 0 Puis on fait la somme de ces résultats |
|
|
10
|
|
|
#11 |
|
Membre du Club
![]() Développeur informatique Inscription : avril 2009 Messages : 235 ![]() |
Merci à vous deux pour vos explications.
Mon problème est maintenant totalement résolue. Bonne fin de journée |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com