SQL-strengaggregatfunktioner

Sql Strengaggregatfunktioner



Hvis du nogensinde har beskæftiget dig med SQL-databaser, er du sikkert bekendt med aggregerede funktioner. De er i det væsentlige et sæt funktioner, der udfører beregningerne på et sæt værdier og returnerer et enkelt resultat.

Et eksempel inkluderer funktioner som SUM(), AVG(), COUNT(), MAX og MIN(). En ting du dog vil bemærke ved aggregerede funktioner i SQL er, at de er gearet til numeriske operationer.

Men vidste du, at der er aggregerede funktioner, der beskæftiger sig med strengværdier? I denne vejledning vil vi se på disse funktioner, hvordan de fungerer, og hvordan vi kan bruge dem i vores databaser.







BEMÆRK: Det er en god note, at de fleste af de funktioner, der diskuteres i dette indlæg, ikke er en del af standard SQL. Som et resultat er de en udvidelse af forskellige databasemotorer såsom PostgreSQL, SQL Server osv.



Hvad er strengaggregatfunktioner?

Aggregerede strengfunktioner er et sæt funktioner, der udfører aggregeringshandlingerne på et sæt strenge inden for en gruppe eller rækker og returnerer et enkelt resultat.



Vi bruger hovedsageligt disse funktioner med GROUP BY-sætningen til at gruppere rækkerne baseret på en bestemt kolonne og derefter aggregere strengene i hver gruppe.





Nogle almindelige strengaggregatfunktioner inkluderer:

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

Lad os undersøge hver funktion, og hvad den giver.



GROUP_CONCAT()

GROUP_CONCAT()-funktionen understøttes af PostgreSQL- og MySQL-databaser. Det giver os mulighed for at sammenkæde værdierne fra flere rækker i en enkelt streng.

Antag, at vi har en 'medarbejder'-tabel som følger:

CREATE TABLE medarbejdere (
medarbejder_id INT AUTO_INCREMENT PRIMÆR NØGLE,
fornavn VARCHAR(50),
efternavn VARCHAR(50),
afdeling VARCHAR(50)
);

INDSÆT I medarbejdere (fornavn, efternavn, afdeling) VÆRDIER
('Alice', 'Smith', 'Human Resources'),
('Bob', 'Johnson', 'Marketing'),
('Charlie', 'Wilson', 'Finans'),
('David', 'Brown', 'Salg'),
('Eva', 'Davis', 'Engineering');

Produktion:

Hvis vi vil bestemme det fulde navn på medarbejderen ved at tage fornavnet og sammenkæde med efternavnet, kan vi bruge GROUP_CONCAT()-funktionen som vist i følgende eksempel:

VÆLG
afdeling,
GROUP_CONCAT(fornavn, ' ', efternavn) AS fuldt_navn
FRA
medarbejdere
GRUPPE EFTER
afdeling;

I dette tilfælde bruger vi funktionen til at sammenkæde strengene fra kolonnerne 'fornavn' og 'efternavn' og en tom streng til at tilføje et mellemrum til navnene.

Denne indeholder en liste over medarbejdere i hver afdeling.

STRING_AGG

Denne funktion ligner GROUP_CONCAT()-funktionen, men den understøttes kun i SQL Server-databasen.

Et eksempel på brug er som følger:

VÆLG
afdeling,
STRING_AGG(fornavn, efternavn, ' ') AS fuldt_navn
FRA
medarbejdere
GRUPPE EFTER
afdeling;

Dette udfører strengsammenkædningen på de angivne kolonner som mellemrummet som afgrænser.

ARRAY_AGG

ARRAY_AGG-funktionen er kun tilgængelig i PostgreSQL-databasen. Det giver os mulighed for at aggregere værdierne i en enkelt matrix.

Et eksempel er som følger:

VÆLG
afdeling,
ARRAY_AGG(fornavn) AS medarbejderliste
FRA
medarbejdere
GRUPPE EFTER
afdeling;

Dette bør samle medarbejdernavnet som en matrix.

LISTAGG()

Funktionen LISTAGG() er kun tilgængelig i Oracle-databasen. Det giver os mulighed for at sammenkæde værdierne i en enkelt streng med en specificeret afgrænser.

Et eksempel er som følger:

VÆLG afdeling, LISTAGG(fornavn, efternavn,  ' ') INDEN FOR GRUPPE (ORDRE EFTER medarbejdernavn ASC) SOM medarbejdere
FRA medarbejdere
GROUP BY afdeling;

Dette sammenkæder medarbejdernes navne og den angivne afgrænsning.

Konklusion

I dette selvstudie lærte vi om strengaggregatefunktionerne, der giver os mulighed for at levere en liste over strengværdier og udføre en operation i en enkelt resulterende strengværdi.