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 :

Modifier des colonnes (novice)


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    juin 2018
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : juin 2018
    Messages : 102
    Points : 42
    Points
    42
    Par défaut Modifier des colonnes (novice)
    Bonjour à tous,

    Disposant d'une base de données s'appellant "mobil_pro", je souhaite la modifier pour partir de ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    path ; cost; sexe
    42-60 ; 12; male
    42-60; 5; female
    42-61; 3.59; male
    42-62; 13.85; male
    42-62; 2.96; female
    ... à ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    path; male; female
    42-60 ; 12; 5;
    42-61; 3.59; 0
    42-62; 13.85; 2.96
    Je sais que l’utilisation de array_agg serait bien dand cette situation, mais je ne vois pas trop la syntaxe qu'aura la requête.

    Merci à vous.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    5 414
    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 : 5 414
    Points : 16 331
    Points
    16 331
    Billets dans le blog
    1
    Par défaut
    Bonsoir

    Quelques questions
    - pouvez-vous communiquer le script complet de création de la table actuelle (ordre CREATE TABLE avec toutes ses colonnes et contraintes)
    - est-ce que pour une valeur de "path " il existe toujours une et une seule valeur de mâle et une et une seule valeur de femelle ?
    - peut il exister des valeurs de "path" pour lesquelles il y a des valeurs qui ne correspondent ni à "mâle" ni à "femelle" ("inconnu" par exemple)
    Si la réponse à l'une des deux dernières questions est oui, alors le modèle que vous proposez est inadapté

  3. #3
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    juin 2018
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : juin 2018
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonsoir

    Quelques questions
    - pouvez-vous communiquer le script complet de création de la table actuelle (ordre CREATE TABLE avec toutes ses colonnes et contraintes)
    - est-ce que pour une valeur de "path " il existe toujours une et une seule valeur de mâle et une et une seule valeur de femelle ?
    - peut il exister des valeurs de "path" pour lesquelles il y a des valeurs qui ne correspondent ni à "mâle" ni à "femelle" ("inconnu" par exemple)
    Si la réponse à l'une des deux dernières questions est oui, alors le modèle que vous proposez est inadapté
    Merci pour votre réponse.

    - Cette table provient d'un pré-filtre que j'ai réalisé sur la base de donnée "Mobilité professionnelle" de l'INSEE. Voici la requête que j'ai tapé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select distinct departement_commune || ' - ' || departement_dclt as path, ipondi as cost, sexe
    from mobil_pro
    Ceci afin de concaténer les champs départ/arrivé, et de ne garder que les coûts des individus et leur sexe. Je n'ai pas le script sous la main, vu que c'est juste un import du CSV disponible sur le site de l'INSEE.

    Voici le .sql de la table entière : https://drive.google.com/open?id=1HZ...l7-MhgKuSc7q4I

    - J'ai peur de ne pas avoir compris la question. En soit, il existe des valeurs de path où Male OU Femelle est null. Dans ce cas, ça correspond à un trajet effectué uniquement par des individus masculins ou que des individus féminins.

    - Non, il n'existe aucune valeur de Path dans laquelle la valeur de Male ET Femelle sont nulles.

    Un grand merci à vous.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Consultant ERP
    Inscrit en
    janvier 2013
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Conseil

    Informations forums :
    Inscription : janvier 2013
    Messages : 322
    Points : 941
    Points
    941
    Par défaut
    Ahh si postgres avait pivot

  5. #5
    Expert éminent sénior

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    5 414
    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 : 5 414
    Points : 16 331
    Points
    16 331
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par preliator Voir le message
    Voici le .sql de la table entière : https://drive.google.com/open?id=1HZ...l7-MhgKuSc7q4I
    Malheureusement c'est illisible


    Citation Envoyé par preliator Voir le message
    - J'ai peur de ne pas avoir compris la question. En soit, il existe des valeurs de path où Male OU Femelle est null. Dans ce cas, ça correspond à un trajet effectué uniquement par des individus masculins ou que des individus féminins.
    - Non, il n'existe aucune valeur de Path dans laquelle la valeur de Male ET Femelle sont nulles.
    Ceci ne répond que partiellement à ma question, vous ne précisez pas si on peut avoir plusieurs valeurs mâle et/ou plusieurs valeurs femelle pour un même path

  6. #6
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    juin 2018
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : juin 2018
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Ah ! D'accord.
    Dans ce cas non , il n'y a pas plusieurs valeurs pour une seule valeur de Path

  7. #7
    Expert éminent sénior

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    5 414
    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 : 5 414
    Points : 16 331
    Points
    16 331
    Billets dans le blog
    1
    Par défaut
    Alors une solution possible :

    Jeu de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with t1 (Cid, Cpath, Ccost, Csex) as
        (select 1, '42-60', 012.00, 'male  '   union all
         select 2, '42-60', 005.00, 'female'   union all
         select 3, '42-61', 003.59, 'male  '   union all
         select 4, '42-62', 013.85, 'male  '   union all
         select 5, '42-62', 002.96, 'female'   union all
         select 6, '66-77', 020.55, 'female'
        )
    Requête :
    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
    select coalesce(TM.Cpath, TF.Cpath) as Xpath
         , tm.ccost as mcost
         , tf.ccost as fcost
    from (select Cpath
               , max(Ccost) as ccost
          from t1
          where Csex='male  '
          group by Cpath
         ) as TM
    full outer join
         (select Cpath
               , max(Ccost) as ccost
          from t1
          where Csex='female'
          group by Cpath
         ) as TF
      on TF.Cpath=TM.Cpath
    Résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Xpath	mcost	fcost
    42-60	12.00	5.00
    42-61	3.59	
    42-62	13.85	2.96
    66-77		20.55

  8. #8
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    juin 2018
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : juin 2018
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Un grand merci a vous

  9. #9
    Modérateur

    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    7 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata

    Informations forums :
    Inscription : septembre 2008
    Messages : 7 922
    Points : 15 840
    Points
    15 840
    Par défaut
    Ou plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      select Cpath
           , max(case Csex when 'male  ' then Ccost end) as male
           , max(case Csex when 'female' then Ccost end) as female
        from t1
    group by Cpath
    order by Cpath asc;

  10. #10
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    juin 2018
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : juin 2018
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Merci beaucoup !
    Est-ce possible d'utiliser array_agg dans cette situation ?

  11. #11
    Modérateur

    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    7 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata

    Informations forums :
    Inscription : septembre 2008
    Messages : 7 922
    Points : 15 840
    Points
    15 840
    Par défaut
    Vous pourriez si vous voulez complexifier (inutilement) votre solution.
    ARRAY_AGG comme son nom l'indique sert à agréger des tableaux, ici vous n'avez rien de tout ça.

Discussions similaires

  1. Jtable : modifier les noms des colonnes
    Par Aerofly dans le forum Composants
    Réponses: 6
    Dernier message: 02/01/2007, 15h27
  2. Réponses: 4
    Dernier message: 19/05/2006, 11h24
  3. Réponses: 4
    Dernier message: 24/11/2005, 15h18
  4. [TDbGrid] Comment modifier la largeur des colonnes ?
    Par colorid dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/11/2005, 19h47
  5. Modifier le titre des colonnes d'une DBGrid
    Par deubal dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/11/2005, 18h15

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