sql >> Database teknologi >  >> RDS >> PostgreSQL

Sammenkæd/flet matrixværdier under gruppering/aggregering

Tilpasset aggregat

Fremgangsmåde 1:definer et tilpasset aggregat. Her er en, jeg skrev tidligere.

CREATE TABLE my_test(title text, tags text[]);

INSERT INTO my_test(title, tags) VALUES
('ridealong', '{comedy,other}'),
('ridealong', '{comedy,tragedy}'),
('freddyjason', '{horror,silliness}');

CREATE AGGREGATE array_cat_agg(anyarray) (
  SFUNC=array_cat,
  STYPE=anyarray
);

select title, array_cat_agg(tags) from my_test group by title;

LATERAL forespørgsel

... eller da du ikke ønsker at bevare orden og ønsker at deduplikere, kan du bruge en LATERAL forespørgsel som:

SELECT title, array_agg(DISTINCT tag ORDER BY tag) 
FROM my_test, unnest(tags) tag 
GROUP BY title;

i så fald har du ikke brug for det tilpassede aggregat. Denne er sandsynligvis en smule langsommere for store datasæt på grund af deduplikeringen. Fjerner ORDER BY hvis det ikke er nødvendigt, kan det dog hjælpe.



  1. Er lig med (=) vs. LIKE for datodatatype

  2. SQL Server 2016:Opret en database

  3. Gendannelse af SQL Editor-filer (forespørgsler, procedurer) efter tudse for Oracle-nedbrud eller hængende

  4. Sådan starter parallelle planer - del 3