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