Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
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 27/06/2006, 16h15   #1
Invité régulier
 
Inscription : février 2004
Messages : 24
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 24
Points : 6
Points : 6
Par défaut Calcul de pourcentages

Bonjour,

Je tourne un peu en rond sur un probleme de calcul de pourcentages.
Je travaille sous MySQL 4.1.7 (pas de vues)
Et mon problème est le suivant :

Je possède une table `hmlog` contenant 5 champs: id_log, date, test_name, status_id et log_time.

Je souhaite calculer le pourcentage de logs pourlesquels le 'status_id' est à 1 pour chaque jour, puis pour chaque mois puis pour chaque année.

Je possède une table `Journalier` dans laquelle je veux "includer" mes résultats puis une table `mensuel` et enfin une table `annuel`.

Je voudrais que ce cacul se fasse tous les soir pour que ma base soit à jour tous les matins.
Je ne sais pas comment m'y prendre. Je pensais faire un script en SQL en tache planifiée mais je ne vois pas comment faire ce cacul de pourcentages uniquement avec du SQL. Et je ne sais pas si les procédures stoquées peuvent m'aider ...

J'ai besoin d'aide.Au secours

Merci d'avance.

J.Charles
Lypertrophie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2006, 17h22   #2
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
Bonjour,

Un truc dans ce style pourrait peut-être aider :

Code :
1
2
3
 
SELECT count(IF(status_id=1,1,NULL)) / count(*) * 100 
FROM ... WHERE ... GROUP BY date
__________________
Pensez au tag
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2006, 10h27   #3
Invité régulier
 
Inscription : février 2004
Messages : 24
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 24
Points : 6
Points : 6
Ok ... Je te remercie ...

Je vais tester ca dans la matinée et je vous tiens au courant.

Encore merci.

J.Charles
Lypertrophie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2006, 10h33   #4
Invité régulier
 
Inscription : février 2004
Messages : 24
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 24
Points : 6
Points : 6
Ca y'est j'ai enfin pu tester cette formule ... Et effectivement cela fonctionne.

Est-il possible de m'expliquer le
Code :
COUNT(IF(STATUS=1,1,NULL))
Je ne suis pas sur de bien saisir ...

Si status=1 on ajoute 1 sinon on ajoute rien c'est ca ?

Merci pour l'aide.

J.Charles
Lypertrophie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2006, 11h11   #5
Rédacteur
 
Avatar de Biglo
 
Inscription : juillet 2002
Messages : 537
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : juillet 2002
Messages : 537
Points : 561
Points : 561
Oui, c'est cela.

COUNT() compte le nombre d'enregistrements mais ne prend pas en compte les NULL. Donc ici, l'astuce consiste à fournir NULL si l'enregistrement ne nous intéresse pas.

Cela est fait avec IF (condition, valeur si condition vraie, valeur si condition fausse). Si "Status=1" est vrai, alors COUNT recevra 1 et prendra en compte cette valeur dans son comptage. Si Status <> 1, COUNT recevra NULL et ne prendra pas en compte cette valeur dans le comptage.

Voilà, j'espère que mon charabia est clair
Biglo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2006, 11h25   #6
Invité régulier
 
Inscription : février 2004
Messages : 24
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 24
Points : 6
Points : 6
On ne peut plus clair !
Merci très beaucoup

J.Charles
Lypertrophie 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 23h51.


 
 
 
 
Partenaires

Hébergement Web