2012-05-06 10 views

Respuesta

13

En PostgreSQL 9.0 o temprano se puede order elements inside aggregate functions:

SELECT company_id, array_agg(employee ORDER BY company_id DESC)::text 
FROM tbl 
GROUP BY 1; 

que no está disponible para PostgreSQL 8.4 . Debe preordenar los valores que se agregarán. Utilice una subselección o CTE (8.4+) para este propósito:

SELECT company_id, array_agg(employee)::text 
FROM (SELECT * FROM tbl ORDER BY company_id, employee DESC) x 
GROUP BY 1; 

I ORDER BY company_id Además, debido a que debería acelerar la agregación.

También utilizo el "truco" de simplemente lanzar la matriz a text (array_agg(employee)::text), que le da una cadena básica separada por comas sin espacio en blanco adicional y es la manera más rápida.
Para el formato más sofisticado, utilice array_to_string(array_agg(employee), ', ') como que tiene en su pregunta.

+0

Gracias compañero, eso es lo que estaba buscando :) – David

Cuestiones relacionadas