Eu tenho uma tabela e gostaria de puxar uma linha por id com valores de campo concatenados.
Na minha mesa, por exemplo, tenho o seguinte:
TM67 | 4 | 32556
TM67 | 9 | 98200
TM67 | 72 | 22300
TM99 | 2 | 23009
TM99 | 3 | 11200
E eu gostaria de mostrar:
TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3 | 23009,11200
No MySQL, consegui usar a função agregada GROUP_CONCAT
, mas isso não parece funcionar aqui ... Existe um equivalente para o PostgreSQL, ou outra maneira de conseguir isso?
sql
postgresql
group-concat
string-aggregation
TwixxyKit
fonte
fonte
Respostas:
Este é provavelmente um bom ponto de partida (apenas na versão 8.4+):
array_agg retorna um array, mas você pode convertê- lo em texto e editar conforme necessário (veja os esclarecimentos abaixo).
Antes da versão 8.4, você mesmo deveria defini-lo antes de usar:
(parafraseado na documentação do PostgreSQL)
Esclarecimentos:
fonte
Desde o 9.0, isso é ainda mais fácil:
fonte
array_agg
) por exemplo,string_agg(some_column, ',' ORDER BY some_column)
ou mesmostring_agg(surname || ', ' || forename, '; ' ORDER BY surname, forename)
distinct
funciona com string_agg, então pode-se usarstring_agg(distinct some_solumn, ',')
TEXT
se esse for um valor não-stringável (por exemplo,uuid
). Isso seria parecido comstring_agg(some_column::text, ',')
Vai fazer também.
fonte
Tente assim:
fonte
e a versão para trabalhar no tipo de matriz :
fonte
character varying(5)[]
. Além disso, verifiquei que, para o meu propósito - é necessário desnaturar, caso contrário, você veráERROR: cannot accumulate arrays of different dimensionality
.Minha sugestão no postgresql
fonte
ORDER BY
uma consulta interna? A encomenda não se perde, afinal?Espero que a consulta abaixo do Oracle funcione.
fonte