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

PostgreSQL Discussion :

Aide à la "création" d'une requête postgreSQL


Sujet :

PostgreSQL

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Aide à la "création" d'une requête postgreSQL
    Bonjour

    J'ai une base de données qui est le résultat d'un distancier fait sur géoconcept avec un point a et point b et un champ avec une durée en minutes. J'ai fait mon distancier avec une centaine de bâtiments sur des centaines de lieux dits ce qui me donne un tableau une fois trié avec par bâtiments correspondant une vingtaine de lieux dits en face et les durées de distance entre ces deux ponctuels. Je voudrais sélectionner les 8 premiers lieux-dits par bâtiments et les ordonner par temps descendant.

    Ma table est déjà triée par bâtiments et par durée mais je n'arrive pas à extraire que les 8 premiers de chaque bâtiments.
    Top 8 ne fonctionnant pas sur postgres et la fonction limit 8 ne me donnant que les 8 premier de toute ma table sans tenir compte des bâtiments différents. Je pense qu'il me faut un sous select mais je sais pas comment m'y prendre.
    Si quelqu'un à un petite idée de comment m'y prendre.

    J'arrive pas à être plus clair, je suis désoler.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Ce serait plus clair si vous fournissiez la description de votre table, un extrait du contenu et un exemple de résultat attendu.

    En l'état, il semble que l'utilisation du mot clef "distinct" soit la solution à votre besoin.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Points : 1 189
    Points
    1 189
    Billets dans le blog
    2
    Par défaut
    Bonjour à tout les deux,

    La fonction « limit » sous ProstgreSQL est différente de sous Oracle. Le problème que tu sembles rencontrer peut provenir de là. De plus je me demande s’il ne faut pas trier ton « select » même si ta Table est triée.

    Par contre je reviens sur la proposition de mon prédécesseur et suis d’accord avec lui sur le besoin de précision sur ta demande.

    Bien cordialement.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par dev_ggy Voir le message
    La fonction « limit » sous ProstgreSQL est différente de sous Oracle.
    Hormis le fait qu'elle n'existe pas sous Oracle, ça fonctionne comme un filtre ROWNUM <=
    TOP est une fonctionnalité T-SQL (SQL-Server & Sybase), et fonctionne exactement comme LIMIT et ROWNUM.

    Citation Envoyé par dev_ggy Voir le message
    même si ta Table est triée.
    Une table triée, ça n'existe pas.
    Une table est un sac de billes, même si vous mettez vos billes dans un ordre dedans, quand vous les sortirez rien ne garantira un quelconque tri.

    gwenggat, il faut que vous utilisiez par exemple la fonction row_number, rank ou dense_rank selon votre besoin et que vous filtriez dessus.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select *
      from (select t.*
                 , row_number() over(partition by batiment order by duree desc) as rn
              from matable as t) as sr
     where rn <= 8;

  5. #5
    Membre éprouvé

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Points : 1 189
    Points
    1 189
    Billets dans le blog
    2
    Par défaut
    Bonjour Waldar,

    Merci pour ces précisions.

    Bien cordialement

  6. #6
    Invité
    Invité(e)
    Par défaut
    Pour vous donner une idée avec un schéma simplifié

    Créez une table test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE test
    (
      champ1 character varying,
      champ2 integer
    )
    ensuite peuplez de valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    insert into test (champ1, champ2) Values ('tato', 1);
    insert into test (champ1, champ2) Values ('teto', 2);
    insert into test (champ1, champ2) Values ('tito', 3);
    insert into test (champ1, champ2) Values ('toto', 4);
    insert into test (champ1, champ2) Values ('tuto', 5);
    et testez avec "order by" le champ qui vous intéresse soit en descendant (DESC) soit en ascendant (ASC)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from test order by champ2 ASC limit 2
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from test order by champ2 DESC limit 2

Discussions similaires

  1. Aide à la création d'une requête
    Par Sayrus dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/08/2009, 12h07
  2. besoin d'aide pour la création d'une requête
    Par fabien59420 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/06/2008, 15h29
  3. Aide a la création d'une requête
    Par kakou dans le forum Requêtes
    Réponses: 6
    Dernier message: 18/04/2008, 21h26
  4. Réponses: 2
    Dernier message: 10/03/2006, 13h55
  5. [MySQL] Aide à la création d'une requête
    Par tom06440 dans le forum Requêtes
    Réponses: 6
    Dernier message: 19/10/2005, 22h05

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