Agregačné funkcie pre reťazec SQL

Agregacne Funkcie Pre Retazec Sql



Ak ste sa niekedy zaoberali SQL databázami, pravdepodobne poznáte agregačné funkcie. Sú to v podstate množina funkcií, ktoré vykonávajú výpočty na množine hodnôt a vracajú jeden výsledok.

Príklad zahŕňa funkcie ako SUM(), AVG(), COUNT(), MAX a MIN(). Jedna vec, ktorú si všimnete na agregovaných funkciách v SQL, je, že sú zamerané na numerické operácie.

Vedeli ste však, že existujú agregované funkcie, ktoré sa zaoberajú hodnotami reťazcov? V tomto návode sa pozrieme na tieto funkcie, ako fungujú a ako ich môžeme použiť v našich databázach.







POZNÁMKA: Je dobré poznamenať, že väčšina funkcií, o ktorých sa hovorí v tomto príspevku, nie je súčasťou štandardného SQL. Vďaka tomu sú rozšírením rôznych databázových motorov ako PostgreSQL, SQL Server atď.



Čo sú agregačné funkcie reťazcov?

Agregačné funkcie reťazcov sú množinou funkcií, ktoré vykonávajú agregačné operácie na množine reťazcov v rámci skupiny alebo riadkov a vracajú jeden výsledok.



Tieto funkcie používame hlavne s klauzulou GROUP BY na zoskupenie riadkov na základe určitého stĺpca a potom agregáciu reťazcov v každej skupine.





Niektoré bežné funkcie agregácie reťazcov zahŕňajú:

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

Poďme preskúmať každú funkciu a to, čo poskytuje.



GROUP_CONCAT()

Funkciu GROUP_CONCAT() podporujú databázy PostgreSQL a MySQL. Umožňuje nám zreťaziť hodnoty z viacerých riadkov do jedného reťazca.

Predpokladajme, že máme tabuľku „zamestnancov“ nasledovne:

Zamestnanci CREATE TABLE (
zamestnanec_id INT AUTO_INCREMENT PRIMÁRNY KĽÚČ,
meno VARCHAR(50),
priezvisko VARCHAR(50),
oddelenie VARCHAR(50)
);

INSERT INTO zamestnancov (meno, priezvisko, oddelenie) HODNOTY
('Alice', 'Smith', 'Ľudské zdroje'),
('Bob', 'Johnson', 'Marketing'),
('Charlie', 'Wilson', 'Financie'),
('David', 'Brown', 'Predaj'),
('Eva', 'Davis', 'Inžinierstvo');

Výkon:

Ak chceme určiť celé meno zamestnanca tak, že vezmeme krstné meno a zreťazíme s priezviskom, môžeme použiť funkciu GROUP_CONCAT(), ako je znázornené v nasledujúcom príklade:

VYBRAŤ
oddelenie,
GROUP_CONCAT(meno, ' ', priezvisko) AKO celé_meno
OD
zamestnancov
GROUP BY
oddelenie;

V tomto prípade použijeme funkciu na zreťazenie reťazcov zo stĺpcov „first_name“ a „last_name“ a prázdny reťazec na pridanie medzery k menám.

Toto obsahuje zoznam zamestnancov v každom oddelení.

STRING_AGG

Táto funkcia je podobná funkcii GROUP_CONCAT(), ale je podporovaná iba v databáze SQL Server.

Príklad použitia je nasledujúci:

VYBRAŤ
oddelenie,
STRING_AGG(first_name, last_name, ' ') AS celé meno
OD
zamestnancov
GROUP BY
oddelenie;

Tým sa vykoná zreťazenie reťazcov v zadaných stĺpcoch ako medzera ako oddeľovač.

ARRAY_AGG

Funkcia ARRAY_AGG je dostupná len v databáze PostgreSQL. Umožňuje nám agregovať hodnoty do jedného poľa.

Príklad je nasledujúci:

VYBRAŤ
oddelenie,
ARRAY_AGG(first_name) AS zoznam zamestnancov
OD
zamestnancov
GROUP BY
oddelenie;

Toto by malo agregovať meno zamestnanca ako pole.

LISTAGG()

Funkcia LISTAGG() je dostupná len v databáze Oracle. Umožňuje nám zreťaziť hodnoty do jedného reťazca so zadaným oddeľovačom.

Príklad je nasledujúci:

SELECT oddelenie, LISTAGG(meno, priezvisko,  ' ') WITHIN GROUP (ORDER BY zamestnanec_name ASC) AS zamestnanci
OD zamestnancov
GROUP BY oddelenie;

Tým sa spoja mená zamestnancov a zadaný oddeľovač.

Záver

V tomto návode sme sa dozvedeli o funkciách agregácie reťazcov, ktoré nám umožňujú poskytnúť zoznam hodnôt reťazcov a vykonať operáciu s jednou výslednou hodnotou reťazca.