Bonjour à tous,
J'essaie depuis un moment de résoudre un problème dont je ne vois pas la cause.
Il me faut obtenir un prix moyen des logements au m² dans la colonne commune de mon tableau. Les lignes de mon tableau correspondent au différents types de biens (maison , T1,T2,...).
Le principe est donc de recenser les mêmes type de bien d'une même commune, diviser les prix de ces biens par leurs superficies afin d'obtenir le prix au m² par type de bien.
Voici la requête créée :
La mise en forme est réalisée ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $req_pa= pg_query($base,"SELECT type_bien, COUNT(id) as nb, sum(superficie) as surf, sum(prix) as prix FROM logpriv_2013 WHERE superficie>0 and insee='".$commune."' GROUP BY type_bien order by type_bien");;
Cela fonctionne très bien lorsque qu'il n'y a qu'une seule occurrence en revanche le calcul n'est plus bon lorsque qu'il y en a plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 while($rep_i = pg_fetch_assoc($req_pi)) { $rep_o = pg_fetch_assoc($req_po); $rep_a = pg_fetch_assoc($req_pa); echo "<tr> <td class='defaut' bgcolor='#FBFA50'><h4>Prix : ".$rep_a['type_bien']." (nombre de logements)</h4></td> <td class='defaut'><h3>".number_format($rep_a['prix']/$rep_a['surf'],2,',',' ')." ( ".number_format($rep_a['nb'],0,',',' ')." ) </h3></td> <td class='defaut'><h3>".number_format($rep_o['prix']/$rep_o['surf'],2,',',' ')." ( ".number_format($rep_o['nb'],0,',',' ')." ) </h3></td> <td class='defaut'><h3>".number_format($rep_i['prix']/$rep_i['surf'],2,',',' ')." ( ".number_format($rep_i['nb'],0,',',' ')." ) </h3></td> </tr>"; }
J'ai essayé de passer par la fonction d'agrégation AVG mais en vain.
J'ai aussi essayé de créer une variable moyenne dans la requête ...
J'ai tout d'abord pensé à un problème d'arrondi car peu d'erreur sur les calculs mais plus il y a d'occurrences plus il y'a d'erreur...
Je ne comprends pas très bien malgré de nombreuses recherches !!
Si vous avez des pistes je serais ravi d'en parler.
PS : Si je n'ai pas été clair n'hésitez pas à me demander plus d'infos.
Merci d'avance.
Partager