Agregatno spajanje stringova za PostgreSQL
Sunday, 26.08.2007 – SrdjanSQL standard propisuje 5 agregatnih funkcija: AVG, COUNT, MAX, MIN i SUM. Uz izuzetak COUNT funkcije, ostale agregatne funkcije rade nad numeričkim vrednostima.
Šta da radimo ako nam je potrebno prosto spajanje (konkatenacija) stringova? Iskoristićemo PostgreSQL-ovu mogućnost CREATE AGGREGATE za kreiranje nove agregatne funkcije.
Uopšte nije teško na internetu naći ovakvu funkciju. Prikazaću jednu koja je napisana upotrebom SQL jezika:
CREATE FUNCTION agg_concat (text, text) RETURNS text AS $body$ SELECT CASE WHEN $1 IS NULL THEN $2 ELSE $1 || ', ' || $2 END $body$ LANGUAGE 'sql'; CREATE AGGREGATE agg_concat ( BASETYPE = TEXT, SFUNC = agg_concat, STYPE = TEXT );
Kako se koristi ova nova agregatna funkcija?
Recimo da imamo jednu tabelu i njene podatke:
CREATE TABLE informacije ( datum_informacije DATE NOT NULL, informacija VARCHAR(10) NOT NULL, CONSTRAINT pk_inf PRIMARY KEY (datum_informacije, informacija) ); INSERT INTO informacije (datum_informacije, informacija) VALUES ('2007-08-23', 'posao'); INSERT INTO informacije (datum_informacije, informacija) VALUES ('2007-08-23', 'odmor'); INSERT INTO informacije (datum_informacije, informacija) VALUES ('2007-08-24', 'posao'); INSERT INTO informacije (datum_informacije, informacija) VALUES ('2007-08-24', 'kafic'); INSERT INTO informacije (datum_informacije, informacija) VALUES ('2007-08-24', 'bioskop'); COMMIT;
Ako hoćemo da izvršimo grupisanje informacija po danu, izvršimo sledeći upit:
SELECT datum_informacije, agg_concat(informacija) AS informacije FROM informacije GROUP BY datum_informacije ORDER BY datum_informacije;
Dobijamo sledeći rezultat:
datum_informacije informacije ================= =========== 2007-08-23 posao, odmor 2007-08-24 posao, kafic, bioskop
One Response to “Agregatno spajanje stringova za PostgreSQL”
Hvala, matori, ne mogu da vjerujem da mi je upravo ovo trebalo i, poslije bukvalno 10 sekundi potrage na Guglu, nađem baš to 🙂 Nisam znao za to “create aggregate”, ali eto sad znam 🙂 I to nađoh na srpskom jeziku, za ne povjerovati. Hvala još jednom!
By Darko Maksimović on Mar 13, 2009