Jednodušší s agregační funkcí string_agg() (Postgres 9.0 nebo novější):
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
1 v GROUP BY 1 je poziční reference a zkratka pro GROUP BY movie v tomto případě.
string_agg() očekává datový typ text jako vstup. Jiné typy je třeba přetypovat explicitně (actor::text ) – pokud implicitní přetypování na text je definován – což je případ všech ostatních typů znaků (varchar , character , "char" ) a některé další typy.
Jak poznamenal isapir, můžete přidat ORDER BY klauzule v agregovaném volání, abyste získali setříděný seznam - pokud to potřebujete. Jako:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1; Obvykle je však rychlejší seřadit řádky v poddotazu. Viz:
- Postgres SQL – Vytvořte pole ve výběru