IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requête PostgreSql moyenne [PostgreSQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2012
    Messages : 31
    Par défaut Requête PostgreSql moyenne
    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 :

    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");;
    La mise en forme est réalisée ainsi :

    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,',',' ')." &nbsp;(
    		".number_format($rep_a['nb'],0,',',' ')." )&nbsp;</h3></td>
    		<td class='defaut'><h3>".number_format($rep_o['prix']/$rep_o['surf'],2,',',' ')." &nbsp;(
    		".number_format($rep_o['nb'],0,',',' ')." )&nbsp;</h3></td>
    		<td class='defaut'><h3>".number_format($rep_i['prix']/$rep_i['surf'],2,',',' ')." &nbsp;(
    		".number_format($rep_i['nb'],0,',',' ')." )&nbsp;</h3></td>
    	</tr>";
    }
    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.

    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.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pourquoi il y a 3 requêtes ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2012
    Messages : 31
    Par défaut
    Car dans les autres colonnes je fais des regroupements à différentes échelles (différents ensembles de communes).

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ca serait peut être mieux de faire des sous-requêtes mais c'est une autre question.

    Tu pourrais donner un exemple de jeu de données, le résultat obtenu et le résultat souhaité ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2012
    Messages : 31
    Par défaut
    En fait je reprends le travail de quelqu'un et je ne suis pas un grand spécialiste donc je m'adapte et avance à tatons ... Mais tout conseil m’intéresse !!

    Données :

    prix surface
    1. 439 26
    2. 800 39
    3. 1050 70
    4. 1110 80
    5. 1350 120
    6. 1395 70
    7. 1600 200

    résultat obtenu : 12,80
    résultat voulu : 15,06

    Le nombre de biens pris en compte est bien le bon car le count (id) affiche 7 occurrences.
    En tout cas merci de prendre de ton temps pour ce problème !

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est un problème de maths

    Le bon résultat est bien 12,8 : tu as 7744€ pour 605m2 sur la zone étudiée = 12,8 € / m2

    12,5 c'est la moyenne des prix moyen par type de bien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PostgreSQL] Internal Error 500 suite à requête postgresql
    Par vaderetro33 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 12/10/2010, 10h36
  2. Requête croisée (moyennes dans un tableau)
    Par ganguill dans le forum SQL
    Réponses: 9
    Dernier message: 09/06/2010, 09h45
  3. Réponses: 2
    Dernier message: 30/05/2008, 22h37
  4. Date+delai dans une requête PostGresql
    Par bobic dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 12/03/2007, 12h11
  5. Requête sql, moyenne pondérée
    Par ouiffi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/07/2006, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo