sql >> Databáze >  >> RDS >> PostgreSQL

Zřetězit více řádků výsledků jednoho sloupce do jednoho, seskupit podle jiného sloupce

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


  1. Vraťte typ spouštěče DML na tabulku na serveru SQL

  2. Migrace dat

  3. Android- Musím zkontrolovat, zda tabulka existuje v SqliteHelper.onCreate()?

  4. Jak správně používat Oracle ORDER BY a ROWNUM?