Tengo una tabla y me gustaría extraer una fila por id con valores de campo concatenados.
En mi tabla, por ejemplo, tengo esto:
TM67 | 4 | 32556
TM67 | 9 | 98200
TM67 | 72 | 22300
TM99 | 2 | 23009
TM99 | 3 | 11200
Y me gustaría dar salida:
TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3 | 23009,11200
En MySQL pude usar la función agregada GROUP_CONCAT
, pero eso no parece funcionar aquí ... ¿Hay un equivalente para PostgreSQL u otra forma de lograr esto?
sql
postgresql
group-concat
string-aggregation
TwixxyKit
fuente
fuente
Respuestas:
Este es probablemente un buen punto de partida (solo la versión 8.4+):
array_agg devuelve una matriz, pero puede ENVIARLA al texto y editarla según sea necesario (consulte las aclaraciones a continuación).
Antes de la versión 8.4, debe definirlo usted mismo antes de usar:
(parafraseado de la documentación de PostgreSQL)
Aclaraciones:
fuente
Desde 9.0 esto es aún más fácil:
fuente
array_agg
), por ejemplo,string_agg(some_column, ',' ORDER BY some_column)
o inclusostring_agg(surname || ', ' || forename, '; ' ORDER BY surname, forename)
distinct
funcione con string_agg, por lo que se puede usarstring_agg(distinct some_solumn, ',')
TEXT
si es un valor no encadenable (es deciruuid
). Esto se vería asístring_agg(some_column::text, ',')
Lo haré igual.
fuente
Intenta así:
fuente
y la versión para trabajar en el tipo de matriz :
fuente
character varying(5)[]
. Además, he verificado que, para mi propósito, se necesita unnest; de lo contrario, veráERROR: cannot accumulate arrays of different dimensionality
.Mi sugestion en postgresql
fuente
ORDER BY
una consulta interna? ¿No se perderá el pedido de todos modos?Espero que debajo de Oracle la consulta funcione.
fuente