Condividi
Concatenare stringhe di un campo raggruppate tramite group by in una query PostgreSQL
Data una query SELECT, sto cercando un modo per concatenare le stringhe presenti in un campo raggruppate tramite 'group by'.
Mi spiego meglio con un esempio, supponiamo di avere questa tabella:
ID COMPANY_ID EMPLOYEE
1 1 Anna
2 1 Bill
3 2 Carol
4 2 Dave
Se group_by agisce sulla foreign key 'COMPANY_ID' desidero che i nomi presenti nella colonna 'EMPLOYEE' vengano concatenati (affiancati), ottenendo un resultset simile a questo:
COMPANY_ID EMPLOYEE
1 Anna, Bill
2 Carol, Dave
Esiste qualche funziona nativa in PostgreSQL che consente di fare questo? In pratica cerco qualcosa di analogo alla 'group_concat' di MySql solo che deve funzionare in PostgreSQL.
In Corso
5
PostgreSQL
01-06-2018
2 Risposte
4472 Visite
0
Risposte ( 2 approvate )
Certo, nelle versioni più recenti di Postgres esiste la funzione
string_agg(expression, delimiter)
che ti consente di fare esattamente quello che chiedi, e ti permette anche di specificare un separatore per concatenare le varie stringheInoltre la string_agg ti consente anche di includere la clausola
ORDER BY
all'interno della funzione di aggregazione, così da consentirti non solo la concatenazione delle stringhe ma anche il loro ordinamento, che diversamente resterebbe indefinito.Per le versioni di Postegres precedenti alla 2010 (prima della 9.0 se non sbaglio) la funzione di aggregazione da utilizzare è la
array_agg(expression)
che a differenza della precedente inserisce le stringhe in un array e poi è necessario usare anche la funzionearray_to_string()
per ottenere la stringa intera concatenata, in questo modoA partire dalla versione 9.0 di PostgreSQL puoi usare l'apposita built-in function di aggregazione chiamanta string_agg, e la tua query diventerebbe pressapoco questa: