298 votes

Équivalent de GROUP_CONCAT en Postgresql ?

J'ai un tableau et j'aimerais extraire une ligne par identifiant avec les valeurs des champs concaténées.

Dans mon tableau, par exemple, j'ai ceci :

TM67 | 4  | 32556
TM67 | 9  | 98200
TM67 | 72 | 22300
TM99 | 2  | 23009
TM99 | 3  | 11200

Et j'aimerais sortir :

TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3    | 23009,11200

Dans MySQL, j'ai pu utiliser la fonction d'agrégation GROUP_CONCAT mais cela ne semble pas fonctionner ici... Existe-t-il un équivalent pour PostgreSQL, ou un autre moyen d'y parvenir ?

0 votes

Ce n'est pas une réponse, mais regardez postgresonline.com/journal/index.php?/archives/ .

1 votes

0 votes

1voto

Lucas Cabral Points 11

Ma suggestion dans postgresql

SELECT cpf || ';' || nome || ';' || telefone  
FROM (
      SELECT cpf
            ,nome
            ,STRING_AGG(CONCAT_WS( ';' , DDD_1, TELEFONE_1),';') AS telefone 
      FROM (
            SELECT DISTINCT * 
            FROM temp_bd 
            ORDER BY cpf DESC ) AS y
      GROUP BY 1,2 ) AS x

1 votes

Pourquoi faites-vous ORDER BY dans une requête interne ? L'ordre ne va-t-il pas se perdre de toute façon ?

-1voto

kiruba Points 57

J'espère que la requête Oracle ci-dessous fonctionnera.

Select First_column,LISTAGG(second_column,',') 
    WITHIN GROUP (ORDER BY second_column) as Sec_column, 
    LISTAGG(third_column,',') 
    WITHIN GROUP (ORDER BY second_column) as thrd_column 
FROM tablename 
GROUP BY first_column

0 votes

Je l'ai testé sur rextester.com/l/postgresql_online_compiler et n'a pas fonctionné : 42883 : function listagg(text, unknown, text) does not exist

0 votes

Oracle a une syntaxe et des fonctions différentes de celles de Postgres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X