2012-05-06 5 views

risposta

13

in PostgreSQL 9.0 o poi è possibile order elements inside aggregate functions:

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

che non è disponibile per PostgreSQL 8.4 . Devi preordinare i valori da aggregare. Utilizzare una selezione secondaria o CTE (8.4+) per questo scopo:

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 in più, perché questo dovrebbe accelerare l'aggregazione.

Io uso anche il "trucco" di trasmettere l'array a text (array_agg(employee)::text), che fornisce una stringa di base separata da virgola senza ulteriore spazio bianco ed è il modo più veloce.
Per una formattazione più sofisticata, utilizzare array_to_string(array_agg(employee), ', ') come nella domanda.

+0

Grazie amico, questo è quello che stavo cercando :) – David