Funcții agregate de șiruri SQL

Functii Agregate De Siruri Sql



Dacă v-ați ocupat vreodată de baze de date SQL, probabil că sunteți familiarizat cu funcțiile agregate. Ele sunt în esență un set de funcții care efectuează calculele pe un set de valori și returnează un singur rezultat.

Un exemplu include funcții precum SUM(), AVG(), COUNT(), MAX și MIN(). Cu toate acestea, un lucru pe care îl veți observa despre funcțiile agregate din SQL este că acestea sunt orientate către operații numerice.

Dar știați că există funcții agregate care se ocupă de valorile șirurilor? În acest tutorial, ne vom uita la aceste funcții, cum funcționează și cum le putem folosi în bazele noastre de date.







NOTĂ: Este o notă bună că majoritatea funcțiilor care sunt discutate în acest post nu fac parte din SQL standard. Drept urmare, acestea sunt o extensie a diferitelor motoare de baze de date, cum ar fi PostgreSQL, SQL Server etc.



Ce sunt funcțiile agregate de șiruri?

Funcțiile de agregare de șiruri sunt un set de funcții care efectuează operațiunile de agregare pe un set de șiruri de caractere dintr-un grup sau rânduri și returnează un singur rezultat.



Folosim în principal aceste funcții cu clauza GROUP BY pentru a grupa rândurile pe baza unei anumite coloane și apoi pentru a agrega șirurile din fiecare grup.





Unele funcții comune de agregare de șiruri includ:

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

Să explorăm fiecare funcție și ceea ce oferă.



GROUP_CONCAT()

Funcția GROUP_CONCAT() este suportată de bazele de date PostgreSQL și MySQL. Ne permite să concatenăm valorile din mai multe rânduri într-un singur șir.

Să presupunem că avem un tabel „angajați” după cum urmează:

CREATE TABLE angajații (
employee_id INT AUTO_INCREMENT PRIMARY KEY,
prenume VARCHAR(50),
prenume VARCHAR(50),
departament VARCHAR(50)
);

INSERT INTO angajați (prenume, prenume, departament) VALORI
(„Alice”, „Smith”, „Resurse umane”)
(„Bob”, „Johnson”, „Marketing”)
(„Charlie”, „Wilson”, „Finanțe”)
(„David”, „Maro”, „Vânzări”)
(„Eva”, „Davis”, „Inginerie”);

Ieșire:

Dacă dorim să determinăm numele complet al angajatului prin luarea prenumelui și concatenarea cu numele de familie, putem folosi funcția GROUP_CONCAT() așa cum este demonstrat în exemplul următor:

SELECTAȚI
departament,
GROUP_CONCAT(prenume, ' ', prenume) AS nume_complet
DIN
angajati
A SE GRUPA CU
departament;

În acest caz, folosim funcția pentru a concatena șirurile din coloanele „first_name” și „last_name”, și un șir gol pentru a adăuga un spațiu la nume.

Acesta conține o listă a angajaților din fiecare departament.

STRING_AGG

Această funcție este similară cu funcția GROUP_CONCAT(), dar este acceptată numai în baza de date SQL Server.

Un exemplu de utilizare este următorul:

SELECTAȚI
departament,
STRING_AGG(prenume, prenume, ' ') AS nume_complet
DIN
angajati
A SE GRUPA CU
departament;

Aceasta realizează concatenarea șirurilor pe coloanele specificate ca spațiu ca delimitator.

ARRAY_AGG

Funcția ARRAY_AGG este disponibilă numai în baza de date PostgreSQL. Ne permite să agregam valorile într-o singură matrice.

Un exemplu este următorul:

SELECTAȚI
departament,
ARRAY_AGG(prenume) AS listă_angajați
DIN
angajati
A SE GRUPA CU
departament;

Acest lucru ar trebui să cumpere numele angajatului ca o matrice.

LISTAGG()

Funcția LISTAGG() este disponibilă numai în baza de date Oracle. Ne permite să concatenăm valorile într-un singur șir cu un delimitator specificat.

Un exemplu este următorul:

SELECTARE departament, LISTAGG(prenume, prenume,  ' ') WITHIN GROUP (ORDER BY employee_name ASC) AS angajați
DE LA angajați
GROUP BY departament;

Aceasta concatenează numele angajaților și delimitatorul specificat.

Concluzie

În acest tutorial, am învățat despre funcțiile de agregare a șirurilor care ne permit să furnizăm o listă de valori ale șirurilor și să efectuăm o operație într-o singură valoare de șir rezultată.