SQL agregatne funkcije niza

Sql Agregatne Funkcije Niza



Ako ste ikada imali posla sa SQL bazama podataka, vjerojatno ste upoznati s agregatnim funkcijama. Oni su u biti skup funkcija koje izvode izračune na skupu vrijednosti i vraćaju jedan rezultat.

Primjer uključuje funkcije kao što su SUM(), AVG(), COUNT(), MAX i MIN(). Međutim, jedna stvar koju ćete primijetiti kod agregatnih funkcija u SQL-u jest da su usmjerene prema numeričkim operacijama.

Ali jeste li znali da postoje agregatne funkcije koje se bave vrijednostima nizova? U ovom vodiču ćemo pogledati te funkcije, kako rade i kako ih možemo koristiti u našim bazama podataka.







NAPOMENA: Dobro je napomenuti da većina funkcija o kojima se govori u ovom postu nisu dio standardnog SQL-a. Kao rezultat toga, oni su proširenje različitih motora baze podataka kao što su PostgreSQL, SQL Server itd.



Što su agregatne funkcije nizova?

Funkcije združivanja nizova su skup funkcija koje izvode operacije združivanja na skupu nizova unutar grupe ili redaka i vraćaju jedan rezultat.



Ove funkcije uglavnom koristimo s klauzulom GROUP BY za grupiranje redaka na temelju određenog stupca i zatim agregiranje nizova u svakoj grupi.





Neke uobičajene funkcije agregata niza uključuju:

  • GROUP_CONCAT() – PostgreSQL i MySQL
  • STRING_AGG – SQL Server
  • ARRAY_AGG – PostgreSQL
  • LISTAGG – Oracle

Istražimo svaku funkciju i što ona pruža.



GROUP_CONCAT()

Funkciju GROUP_CONCAT() podržavaju baze podataka PostgreSQL i MySQL. Omogućuje nam spajanje vrijednosti iz više redaka u jedan niz.

Pretpostavimo da imamo tablicu 'zaposlenici' kako slijedi:

CREATE TABLE zaposlenici (
employee_id INT AUTO_INCREMENT PRIMARNI KLJUČ,
ime VARCHAR(50),
prezime VARCHAR(50),
odjel VARCHAR(50)
);

INSERT INTO zaposlenici (ime, prezime, odjel) VRIJEDNOSTI
('Alice', 'Smith', 'Ljudski resursi'),
('Bob', 'Johnson', 'Marketing'),
('Charlie', 'Wilson', 'Financije'),
('David', 'Brown', 'Prodaja'),
('Eva', 'Davis', 'Inženjering');

Izlaz:

Ako želimo odrediti puno ime zaposlenika uzimajući ime i spajajući ga s prezimenom, možemo koristiti funkciju GROUP_CONCAT() kao što je prikazano u sljedećem primjeru:

IZABERI
odjel,
GROUP_CONCAT(ime, ' ', prezime) KAO puno_ime
IZ
zaposlenici
GRUPIRAJ PO
odjel;

U ovom slučaju koristimo funkciju za spajanje nizova iz stupaca 'first_name' i 'last_name' i prazan niz za dodavanje razmaka imenima.

Ovo sadrži popis zaposlenika u svakom odjelu.

STRING_AGG

Ova je funkcija slična funkciji GROUP_CONCAT(), ali je podržana samo u bazi podataka SQL Servera.

Primjer upotrebe je sljedeći:

IZABERI
odjel,
STRING_AGG(ime, prezime, ' ') KAO puno_ime
IZ
zaposlenici
GRUPIRAJ PO
odjel;

Ovo izvodi ulančavanje nizova na navedenim stupcima kao razmak kao graničnik.

ARRAY_AGG

Funkcija ARRAY_AGG dostupna je samo u PostgreSQL bazi podataka. Omogućuje nam da agregiramo vrijednosti u jedan niz.

Primjer je sljedeći:

IZABERI
odjel,
ARRAY_AGG(ime) AS popis_zaposlenika
IZ
zaposlenici
GRUPIRAJ PO
odjel;

Ovo bi trebalo agregirati ime zaposlenika kao niz.

LISTAGG()

Funkcija LISTAGG() dostupna je samo u Oracle bazi podataka. Omogućuje nam spajanje vrijednosti u jedan niz s određenim graničnikom.

Primjer je sljedeći:

SELECT odjel, LISTAGG(ime, prezime,  ' ') UNUTAR GRUPE (POREDAK PREMA Emploee_name ASC) AS zaposlenici
OD zaposlenika
GROUP BY odjel;

Ovo povezuje imena zaposlenika i navedeni graničnik.

Zaključak

U ovom smo vodiču naučili o funkcijama skupljanja nizova koje nam omogućuju pružanje popisa vrijednosti niza i izvođenje operacije u jednoj rezultirajućoj vrijednosti niza.