Cómo concatenar cadenas de un campo string en PostgreSQL en una consulta agrupada con group by

Escrito por Ing. Pablo A Pico el . Posteado en Tutoriales y tips

Supongamos que en una base de datos de PostgreSQL un campo multivalor, como por ejemplo una tabla de contactos y otra tabla de teléfonos con una relación uno a muchos. Ahora necesito en una sola tabla tener la lista de contactos y por cada registro los números telefónicos en un solo campo de texto separados por comas.Al ejecutar una consulta JOIN entre la tabla principal y la tabla multivalor obtenemos:



		

Pero queremos un resultado así:



		

En mysql hay una función para hacer esto GROUP_CONCAT

La solución para Postgres 9.0 o superior:

Las nuevas versiones de PostgreSQL tienen el 

		

 función que va a hacer exactamente lo que la pregunta pide, incluso lo que le permite especificar el delimitador de serie: PostgreSQL 9 de Uso General Funciones de agregado

Actualización a partir de PostgreSQL 8.4:

PostgreSQL 8.4 introduce la función de agregado ARRAY_AGG (expresión) que concatena los valores en una matriz. Entonces array_to_string () se puede usar para dar el resultado deseado:


		

Solución original (para pre-8.4 PostgreSQL)

No hay una función integrada de conjunto para concatenar cadenas. Parece que esto sería necesario, pero no es parte del grupo inicial. Una búsqueda en la Web revela sin embargo algunas implementaciones manuales el mismo ejemplo :


		

Aquí está la documentación CREATE AGGREGATE.
Con el fin de obtener el "," insertado entre ellos sin tener que, al final, es posible que desee hacer su función propia concatenación y sustituirla por la "textcat" anterior. Aquí está uno que arme, pero no han probado ( actualizar: probado en 8.3.12 y funciona bien ):


		

Nota: La función de arriba mostrará una coma, incluso si el valor de la fila es nulo / vacío, que da salida:


		

Si prefiere eliminar las comas adicionales a la producción:


		

sólo tiene que añadir un 

		

 cheque a la función:


		

Etiquetas:, ,

Ing. Pablo A Pico

Hola colegas y amigos. Los invito a seguir el blog a través del Fanpage en Facebook. En caso de que quieran contactarme lo pueden hacer por Twitter. A aquellos que sean Ingenieros de Sistemas y Desarrolladores de software los invito a formar parte de nuestro nuevo grupo en Facebook. Gracias por su visita, Ing Pablo A Pico

"Trackback" Enlace desde tu web.

¡Síguenos en Facebook con un me gusta!

Este sitio web está dedicado a los Ingenieros de Sistemas en Colombia. www.ingenierodesistemas.co