Agradecemos tu ayuda para extender nuestros posts sobre las ciencias informáticas.
Solución:
Desde 9.0 esto es aún más fácil:
SELECT id,
string_agg(some_column, ',')
FROM the_table
GROUP BY id
Este es probablemente un buen punto de partida (solo versión 8.4+):
SELECT id_field, array_agg(value_field1), array_agg(value_field2)
FROM data_table
GROUP BY id_field
array_agg devuelve un arraypero puede CAST eso para enviar un mensaje de texto y editar según sea necesario (consulte las aclaraciones a continuación).
Antes de la versión 8.4, debe definirlo usted mismo antes de usarlo:
CREATE AGGREGATE array_agg (anyelement)
(
sfunc = array_append,
stype = anyarray,
initcond = ''
);
(parafraseado de la documentación de PostgreSQL)
Aclaraciones:
- El resultado de lanzar un array al texto es que el resultado string comienza y termina con llaves. Esos frenos deben quitarse por algún método, si no se desean.
- La conversión de ANYARRAY a TEXT simula mejor la salida CSV, ya que los elementos que contienen comas incrustadas se comillas dobles en la salida en estilo CSV estándar. Ni array_to_string() ni string_agg() (la función “group_concat” agregada en 9.1) citan cadenas con comas incrustadas, lo que da como resultado un número incorrecto de elementos en la lista resultante.
- La nueva función 9.1 string_agg() NO convierte primero los resultados internos en TEXTO. Entonces, “string_agg (value_field)” generaría un error si value_field es un número entero. Se requeriría “string_agg(value_field::text)”. El método array_agg() requiere solo una conversión después de la agregación (en lugar de una conversión por valor).
SELECT array_to_string(array(SELECT a FROM b),', ');
Lo haré también.
Nos puedes añadir valor a nuestra información añadiendo tu veteranía en las referencias.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)