Agregační funkce řetězců SQL

Agregacni Funkce Retezcu Sql



Pokud jste se někdy zabývali SQL databázemi, pravděpodobně znáte agregační funkce. Jedná se v podstatě o sadu funkcí, které provádějí výpočty na sadě hodnot a vracejí jediný výsledek.

Příklad zahrnuje funkce jako SUM(), AVG(), COUNT(), MAX a MIN(). Jedna věc, které si všimnete na agregačních funkcích v SQL, je, že jsou zaměřeny na numerické operace.

Věděli jste ale, že existují agregační funkce, které se zabývají řetězcovými hodnotami? V tomto tutoriálu se podíváme na tyto funkce, jak fungují a jak je můžeme použít v našich databázích.







POZNÁMKA: Je dobré si uvědomit, že většina funkcí, které jsou popsány v tomto příspěvku, není součástí standardního SQL. V důsledku toho jsou rozšířením různých databázových strojů, jako je PostgreSQL, SQL Server atd.



Co jsou agregační funkce řetězců?

Agregační funkce řetězců jsou sadou funkcí, které provádějí agregační operace na sadě řetězců v rámci skupiny nebo řádků a vracejí jeden výsledek.



Tyto funkce používáme hlavně s klauzulí GROUP BY k seskupení řádků na základě určitého sloupce a poté agregaci řetězců v každé skupině.





Některé běžné funkce agregace řetězců zahrnují:

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

Pojďme prozkoumat každou funkci a to, co poskytuje.



GROUP_CONCAT()

Funkce GROUP_CONCAT() je podporována databázemi PostgreSQL a MySQL. Umožňuje nám zřetězit hodnoty z více řádků do jednoho řetězce.

Předpokládejme, že máme tabulku „zaměstnanců“ takto:

CREATE TABLE zaměstnanci (
zaměstnanec_id INT AUTO_INCREMENT PRIMÁRNÍ KLÍČ,
jméno VARCHAR(50),
příjmení VARCHAR(50),
oddělení VARCHAR(50)
);

INSERT INTO zaměstnanci (jméno, příjmení, oddělení) HODNOTY
('Alice', 'Smith', 'Lidské zdroje'),
('Bob', 'Johnson', 'Marketing'),
('Charlie', 'Wilson', 'Finance'),
('David', 'Brown', 'Prodej'),
('Eva', 'Davis', 'Inženýrství');

Výstup:

Pokud chceme určit celé jméno zaměstnance tak, že vezmeme křestní jméno a zřetězíme ho s příjmením, můžeme použít funkci GROUP_CONCAT(), jak ukazuje následující příklad:

VYBRAT
oddělení,
GROUP_CONCAT(křestní_jméno, ' ', příjmení) JAKO celé_jméno
Z
zaměstnanci
SKUPINA VYTVOŘENÁ
oddělení;

V tomto případě použijeme funkci ke zřetězení řetězců ze sloupců „first_name“ a „last_name“ a prázdný řetězec k přidání mezery ke jménům.

Obsahuje seznam zaměstnanců v každém oddělení.

STRING_AGG

Tato funkce je podobná funkci GROUP_CONCAT(), ale je podporována pouze v databázi SQL Server.

Příklad použití je následující:

VYBRAT
oddělení,
STRING_AGG(křestní_jméno, příjmení, ' ') JAKO celé_jméno
Z
zaměstnanci
SKUPINA VYTVOŘENÁ
oddělení;

Tím se provede zřetězení řetězců na zadaných sloupcích jako mezera jako oddělovač.

ARRAY_AGG

Funkce ARRAY_AGG je dostupná pouze v databázi PostgreSQL. Umožňuje nám agregovat hodnoty do jednoho pole.

Příklad je následující:

VYBRAT
oddělení,
ARRAY_AGG(křestní_jméno) AS seznam_zaměstnanců
Z
zaměstnanci
SKUPINA VYTVOŘENÁ
oddělení;

To by mělo agregovat jméno zaměstnance jako pole.

LISTAGG()

Funkce LISTAGG() je k dispozici pouze v databázi Oracle. Umožňuje nám zřetězit hodnoty do jednoho řetězce se zadaným oddělovačem.

Příklad je následující:

SELECT oddělení, LISTAGG(křestní_jméno, příjmení,  ' ') WITHIN GROUP (ORDER BY zaměstnanec_name ASC) AS zaměstnanci
OD zaměstnanců
GROUP BY oddělení;

Tím se zřetězí jména zaměstnanců a zadaný oddělovač.

Závěr

V tomto tutoriálu jsme se dozvěděli o funkcích agregace řetězců, které nám umožňují poskytnout seznam hodnot řetězců a provést operaci s jedinou výslednou hodnotou řetězce.