cs_jolicoeur79
Messages postés62Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 1 avril 2018
-
Modifié par cs_jolicoeur79 le 21/11/2015 à 14:30
cs_jolicoeur79
Messages postés62Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 1 avril 2018
-
22 nov. 2015 à 23:26
Bonjour,
salut les amis
j'ai fais un requête sur deux table mysql pour extraire des statistique annuel
ma requête constitue a extraire le nombre de durée d'emprunt des livres par rapport a l'age d'emprunteur
et je veux ameliorer cette requete car chaque fois je suis obliger de changer la valeur de l'age ex: entre 16 et 20 ans et entre 21 et 25 ans ect...
voici la requête
-----------
SELECT
sum(if(datediff( `t_emprunt`.`date_fin_empr`, `t_emprunt`.`date_debut_empr`)<=30,1,0) ) as '< mois',
sum(if(datediff( `t_emprunt`.`date_fin_empr`, `t_emprunt`.`date_debut_empr`) between 31 and 60,1,0)) as ' > mois et 02 mois',
sum(if(datediff( `t_emprunt`.`date_fin_empr`, `t_emprunt`.`date_debut_empr`) between 61 and 90,1,0)) as ' ',
.......
FROM
`t_emprunteur`
INNER JOIN `t_emprunt` ON (`t_emprunteur.`num_empr` = `t_emprunt`.`num_empr`)
where
and (year(curdate())-substring(`t_emprunteur`.`dat_naissance`,1,4) between 16 and 20)
------------
résultat après l'exécution de cette requête
< mois | > mois et 02 mois | 02 mois et 03mois
5 | 7 | 12
et je veux qu'elle s'affiche sur la forme d un tableau croisse
------------- < mois | > mois et 02 mois | 02 mois et 03mois
16 et 20 ans ----- 5 | 7 | 12
21 et 25 ans ----- 4 | 11 | 14
.......
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 21 nov. 2015 à 15:04
Si la séparation est toujours de 5 ans, tu peux peut être joué avec un Group By sur une division entière (sans chiffre après la virgule) pour grouper les résultats.
cs_jolicoeur79
Messages postés62Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 1 avril 20181 21 nov. 2015 à 20:32
salut NHenry
non la séparation et différente selon les besoins statistique de societe
j'ai trouver une solution avec instruction union
SELECT intervale age,
sum(if(datediff( `t_emprunt`.`date_fin_empr`, `t_emprunt`.`date_debut_empr`)<=30,1,0) ) as '< mois',
sum(if(datediff( `t_emprunt`.`date_fin_empr`, `t_emprunt`.`date_debut_empr`) between 31 and 60,1,0)) as ' > mois et 02 mois',
sum(if(datediff( `t_emprunt`.`date_fin_empr`, `t_emprunt`.`date_debut_empr`) between 61 and 90,1,0)) as ' ',
.......
FROM
`t_emprunteur`
INNER JOIN `t_emprunt` ON (`t_emprunteur.`num_empr` = `t_emprunt`.`num_empr`)
where
and (year(curdate())-substring(`t_emprunteur`.`dat_naissance`,1,4) between 16 and 20)
UNION
SELECT intervale age,
sum(if(datediff( `t_emprunt`.`date_fin_empr`, `t_emprunt`.`date_debut_empr`)<=30,1,0) ) as '< mois',
sum(if(datediff( `t_emprunt`.`date_fin_empr`, `t_emprunt`.`date_debut_empr`) between 31 and 60,1,0)) as ' > mois et 02 mois',
sum(if(datediff( `t_emprunt`.`date_fin_empr`, `t_emprunt`.`date_debut_empr`) between 61 and 90,1,0)) as ' ',
.......
FROM
`t_emprunteur`
INNER JOIN `t_emprunt` ON (`t_emprunteur.`num_empr` = `t_emprunt`.`num_empr`)
where
and (year(curdate())-substring(`t_emprunteur`.`dat_naissance`,1,4) between 25 and 27)
mais le problème c'est que j'ai oblige de répéter la requête plusieurs fois et changer la partie variable
(year(curdate())-substring(`t_emprunteur`.`dat_naissance`,1,4) between 16and 20)
(year(curdate())-substring(`t_emprunteur`.`dat_naissance`,1,4) between 25 and 27)
on attendant une idee pour ameliorer cette requete merci NHenry et @+
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 21 nov. 2015 à 23:35
Si les ages ne sont pas séparés de manière réguliers, impossible de faire propre en une seule requête.
Sinon, tu peux prendre l'age dans une des données (donc groupement par age) puis tu additionne les données ligne par ligne en fonction de tes critères.