sql >> Databasteknik >  >> RDS >> PostgreSQL

Sammanfoga/sammanfoga matrisvärden under gruppering/aggregering

Anpassad sammanställning

Metod 1:definiera ett anpassat aggregat. Här är en jag skrev tidigare.

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;

SIDA fråga

... eller eftersom du inte vill behålla ordningen och vill deduplicera, kan du använda en LATERAL fråga som:

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

i så fall behöver du inte det anpassade aggregatet. Den här är förmodligen lite långsammare för stora datamängder på grund av dedupliceringen. Ta bort ORDER BY om det inte krävs kan det dock hjälpa.



  1. SQL CREATE TABLE Syntax – Listad av DBMS

  2. PHP - Säkra sidor endast för medlemmar med ett inloggningssystem

  3. Oracle:skillnad mellan max(id)+1 och sequence.nextval

  4. Kan jag ansluta till SQL Server med Windows-autentisering från Java EE-webbappen?