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

Requêtes PostgreSQL Discussion :

Débutant statitiques avg()


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2017
    Messages : 7
    Par défaut Débutant statitiques avg()
    Bonjour,

    Je dispose de la table en pièce-jointe sur laquelle je dois réaliser des requêtes statistiques dans le cadre d'une étude marché immobilier.

    Sur la table désirée, je parviens à obtenir les totaux, par commune pour le nb et la surface moyenne des logements par typologie de logements. la moyenne générale du montant des transactions et le prix moyen toutes typologies de logements confondues.

    Par contre je suis incapable d'obtenir la moyenne du m² bâti par type de logement (colonne e_m2_bati_hab).

    J'ai recherché sur le forum, google etc mais n'ai rien trouvé.

    Voici ma requête telle qu'elle existe actuellement. Je vous passe mes différentes tentatives pour obtenir le résultat escompté tel qu'il apparait en pièce-jointe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    SELECT 
     coalesce (geo_mutationtip2.commune, 'Total général'),
     
      sum(geo_mutationtip2.nbapt1pp) as nbapt1pp ,   round(avg(geo_mutationtip2.sapt1pp),2)as surf_moy1p,
     
    -- endroit où je voudrais insérer une colonne avec la moyenne de e_m2_bati_hab pour les appartements d'une pièce
    -- et bien-sûr, la même pour les types de logements suivants
     
      sum(geo_mutationtip2.nbapt2pp)as nbapt2pp,     round(avg(geo_mutationtip2.sapt2pp),2)as surf_moy2p, 
      sum(geo_mutationtip2.nbapt3pp)as nbapt3pp,  round(avg(geo_mutationtip2.sapt3pp),2) as surf_moy3p, 
      sum(geo_mutationtip2.nbapt4pp)as nbapt4pp, round(avg(geo_mutationtip2.sapt4pp),2)as surf_moy4p,
      sum(geo_mutationtip2.nbapt5pp)as nbapt5pp,    round(avg( geo_mutationtip2.sapt5pp),2)as surf_moy5p, 
      sum(geo_mutationtip2.nbmai1pp)as nbmai1pp, round(avg(geo_mutationtip2.smai1pp),2)as sur_moy1p, 
      sum(geo_mutationtip2.nbmai2pp)as nbmai2pp,    round(avg(geo_mutationtip2.smai2pp),2)as sur_moy2p, 
      sum(geo_mutationtip2.nbmai3pp)as nbmai3pp,   round(avg(geo_mutationtip2.smai3pp),2)as sur_moy3p, 
      sum(geo_mutationtip2.nbmai4pp)as nbmai4pp,  round(avg(geo_mutationtip2.smai4pp),2)as sur_moy4p, 
      sum(geo_mutationtip2.nbmai5pp)as nbmai5pp,  round(avg(geo_mutationtip2.smai5pp),2) as sur_moy5p, 
     
        round(avg(geo_mutationtip2.e_m2_bati_hab):: numeric,2) as prix_m2hab,   
        round(avg(geo_mutationtip2.valeurfonc),2) as moy_prixha
    FROM 
     
      dvf2018.geo_mutationtip2
     
     where e_m2_bati_hab is not null -- ceci me permet de ne sélectionner que les biens bâtis et dédiés à l'habitat
     
      group by rollup  
     
       (geo_mutationtip2.commune)
     
     
    ORDER BY
      geo_mutationtip2.commune ASC;
    Je suis sur postrgresql 9.5 avec PGADMIN III sur une base locale et bien-sûr, je suis un grand débutant en sql et tout nouveau sur ce forum.

    Désolé si je ne respecte pas les protocoles :-)
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Quelle est la règle à appliquer pour calculer "la moyenne du m² bâti par type de logement "
    - Il manque la description des tables en entrée, vous ne communiquez que la table résultante
    - Quelle colonne de quelle table donne le type du logement
    - Quelle colonne de quelle table donne la surface du logement
    - Y a -t- il des filtres à appliquer (types à ne pas prendre en compte par exemple)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2017
    Messages : 7
    Par défaut
    Bonjour, et merci pour votre retour.

    Quelle est la règle à appliquer pour calculer "la moyenne du m² bâti par type de logement "
    la colonne à prendre en compte est e_m2_bati_hab

    - Il manque la description des tables en entrée, vous ne communiquez que la table résultante
    Dans la pièce jointe, le 1er tableau correspond à la table sur laquelle j'effectue les requêtes
    Le second tableau correspond à ce que je souhaiterai obtenir.

    - Quelle colonne de quelle table donne le type du logement
    les colonnes définissant le type de logement sont nbapt1pp (qui signifie nombre d'appartements 1 pièce vendus à l'occasion de la mutation) de 1pp (1 pièce) à 5pp (pièces).
    Pour les maison, la colonne se nomme nbmaixpp où x représente le nombre de pièces,
    - Quelle colonne de quelle table donne la surface du logement
    pour les surfaces, le nom de colonne reprend la même logique avec un préfixe "s" à la place de "nb" sapt1pp, smai1pp...

    - Y a -t- il des filtres à appliquer (types à ne pas prendre en compte par exemple)
    oui, et c'est justement là où je coince pour obtenir la moyenne de e_m2_bati_hab pour les lignes où la valeur de la colonne nbapt1pp n'est pas nulle. (et ensuite pour la colonne nbapt2pp à nbapt5pp, et nbmai1pp à 5pp)
    J'ai tenté de mettre le where dans la fonction avg() mais au lieu de me renvoyer une moyenne de e_m2_bati_hab par commune, il me renvoie pour chaque commune la même valeur qui correspond à la moyenne toutes communes confondues.

    Merci en tous cas de prendre la peine de vous intéresser à la demande,

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    La formule générale de cette moyenne est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUM(prix de vente) / SUM()
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2017
    Messages : 7
    Par défaut
    Bonjour SQLpro,

    Il s'agit de l'une des solutions que j'avais tentées, mais je n'obtiens pas le résultat escompté.

    J'ai intégré cette ligne en ligne 4 de ma requête de départ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     (select sum (valeurfonc)/sum (sapt1pp) from dvf2018.geo_mutationtip2 where nbapt1pp is not null )as prixm2a1pp,
    Le problème, c'est que j'obtiens un résultat qui correspond à la moyenne générale pour l'ensemble des communes mais pas ventilé par commune.
    Si je tente de rajouter un group by après le where, j'ai logiquement un message d'erreur : plus d'une ligne renvoyée par une sous-requête utilisée comme une expression.

    J'ai testé sur une table filtrée où je n'ai que les lignes où la valeur de la colonne nbapt1pp n'est pas nulle...la requête fonctionne comme je le souhaiterais, avec la moyenne par commune.


    Je SECHE...

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Utilisez une fonction de fenêtrage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select sum (valeurfonc) OVER (PARTITION BY commune_id) /sum (sapt1pp) OVER (PARTITION BY commune_id)
    from dvf2018.geo_mutationtip2 
    where nbapt1pp is not null
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Débutant XML
    Par viny dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 25/07/2002, 12h07
  2. [Kylix] Re Re: débutant sur Kylix et Linux.....
    Par Eclypse dans le forum EDI
    Réponses: 2
    Dernier message: 08/06/2002, 22h53
  3. [Kylix] Le débutant en Kylix et Linux....
    Par Eclypse dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 10h37
  4. Réponses: 3
    Dernier message: 07/05/2002, 16h06
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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