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 :

GROUP BY et nouvelle colonne


Sujet :

Requêtes PostgreSQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 7
    Points : 7
    Points
    7
    Par défaut GROUP BY et nouvelle colonne
    Bonjour à tous,

    Avant de poster ce message je précise que j'ai fouillé dans la doc de PostgreSQL, la FAQ et sur Google mais sans savoir réellement quels mots-clés utiliser pour trouver une solution à mon problème. En dernier recours je poste donc ici ma question en espérant obtenir quelques conseils des membres du forum.

    Je pense qu'une illustration vaut mieux que mille mots :

    Nom : IllustrationSQL.jpg
Affichages : 196
Taille : 41,9 Ko

    Je cherche à obtenir la table de droite à partir de la table de gauche. Il s'agit donc d'une opération de fusion avec création d'une nouvelle colonne.

    Je mets aussi ici la requête qui m'a permis d'obtenir la table de gauche. L'opération est réalisée sur la géométrie des tables à partir de la fonction ST_Intersects de PostGIS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Drop table if exists "manipulation"."jointure";
     
    Create table "manipulation"."jointure" as
    Select
    "t1"."geom",
    "t1"."IDENTIFIANT",
    "t2"."Depth"
    FROM "manipulation"."Nettoyé" as t1
    Join "manipulation"."POINTDATA_Total" as t2
    ON ST_Intersects(t1.geom,t2.geom)

    Merci d'avance pour vos réponses.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Selon quel critère places-tu la valeur de depth dans depth1 ou depth2 ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Selon quel critère places-tu la valeur de depth dans depth1 ou depth2 ?
    Bonjour et merci de ta réponse,

    L'objectif de la requête est celui d'obtenir les valeurs de profondeur depth des deux sommets de chaque arrête d'une triangulation de Delaunay "manipulation"."Nettoyé". Les sommets sont matérialisés par des points "manipulation"."POINTDATA_Total" et la jointure a pour but de lier ces points contenant l'information de profondeur à chaque arrête. A priori je ne place donc les valeurs de depth dans depth1 ou depth2 sous le seul critère que chacun des sommets d'une arrête ne doit être pris en compte qu'une seule fois.

    Un problème similaire pourrait se poser dans le cas d'une table contenant deux colonnes : "nom" et "note" avec 2..2 notes pour chaque 1..* nom, et que l'on cherche à obtenir une colonne pour chaque note de chaque nom sans davantage de critère.

    J'espère que ces précisions pourront être utiles.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Citation Envoyé par MarinCarto Voir le message
    mais sans savoir réellement quels mots-clés utiliser pour trouver une solution à mon problème
    Le mot clef 'PIVOT' devrait vous amener vers plusieurs solutions.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Effectivement, PIVOT est généralement le mot clé associé à ce genre de besoin.
    Mais là, vu qu'il n'y a pas de règle pour différencier les données, je pense qu'un simple min/max est suffisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    min(depth) as depth1, max(depth) as depth2

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci pour vos conseils, le mot-clé que je recherchais était bien " PIVOT " et pourra me resservir dans le cas où je serais confronté à devoir réaliser ce genre d'opération sur une table contenant plus de deux valeurs par individu. Ici la solution du min et du max à laquelle je n'avais pas pensé fonctionne aussi parfaitement.

    Je laisse ma requête au cas où :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Drop table if exists "manipulation"."jointure";
     
    Create table "manipulation"."jointure" as
    Select
    "t1"."geom",
    "t1"."IDENTIFIANT",
    min("depth") as "depth 1",
    max("depth") as "depth 2"
    FROM "manipulation"."Nettoyé" as t1
    JOIN "manipulation"."POINTDATA_Total" as t2
    ON ST_Intersects(t1.geom,t2.geom)
    GROUP BY "t1"."IDENTIFIANT"
    merci encore !

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

Discussions similaires

  1. Insertion (nouvelle) colonne entre deux existantes sql-2000
    Par icebe dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 19/01/2006, 07h39
  2. insertion nouvelle colonne
    Par fxp17 dans le forum Oracle
    Réponses: 7
    Dernier message: 18/01/2006, 11h53
  3. nouvelle colonne avec condition
    Par evaness dans le forum Access
    Réponses: 6
    Dernier message: 06/09/2005, 16h35
  4. Debutant SQL : Comment inserer une nouvelle colonne dans une
    Par cquadjul dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/07/2005, 21h34
  5. nouvelle colonne html
    Par aliasss dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 18/05/2005, 12h16

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