Geaggregeerde functies voor SQL-tekenreeksen

Geaggregeerde Functies Voor Sql Tekenreeksen



Als u ooit met SQL-databases te maken heeft gehad, bent u waarschijnlijk bekend met aggregatiefuncties. Het zijn in wezen een reeks functies die de berekeningen uitvoeren op een reeks waarden en één resultaat retourneren.

Een voorbeeld bevat functies zoals SUM(), AVG(), COUNT(), MAX en MIN(). Eén ding dat u echter zal opvallen aan aggregatiefuncties in SQL is dat ze gericht zijn op numerieke bewerkingen.

Maar wist u dat er aggregatiefuncties zijn die zich bezighouden met tekenreekswaarden? In deze tutorial bekijken we deze functies, hoe ze werken en hoe we ze in onze databases kunnen gebruiken.







OPMERKING: Het is een goede opmerking dat de meeste functies die in dit bericht worden besproken geen deel uitmaken van de standaard SQL. Als gevolg hiervan zijn ze een uitbreiding van verschillende database-engines zoals PostgreSQL, SQL Server, enz.



Wat zijn string-aggregaatfuncties?

Tekenreeksaggregaatfuncties zijn een reeks functies die de aggregatiebewerkingen uitvoeren op een reeks tekenreeksen binnen een groep of rijen en één resultaat retourneren.



We gebruiken deze functies voornamelijk met de GROUP BY-clausule om de rijen te groeperen op basis van een bepaalde kolom en vervolgens de tekenreeksen in elke groep samen te voegen.





Enkele veel voorkomende string-aggregaatfuncties zijn:

  • GROUP_CONCAT() – PostgreSQL en MySQL
  • STRING_AGG – SQL-server
  • ARRAY_AGG – PostgreSQL
  • LISTAGG – Orakel

Laten we elke functie onderzoeken en wat deze biedt.



GROUP_CONCAT()

De functie GROUP_CONCAT() wordt ondersteund door PostgreSQL- en MySQL-databases. Hiermee kunnen we de waarden uit meerdere rijen samenvoegen tot één enkele string.

Stel dat we de volgende tabel “werknemers” hebben:

MAAK TAFEL medewerkers (
werknemer_id INT AUTO_INCREMENT PRIMAIRE SLEUTEL,
voornaam VARCHAR(50),
achternaam VARCHAR(50),
afdeling VARCHAR(50)
);

INSERT INTO werknemers (voornaam, achternaam, afdeling) WAARDEN
('Alice', 'Smith', 'Personeelszaken'),
('Bob', 'Johnson', 'Marketing'),
('Charlie', 'Wilson', 'Financiën'),
('David', 'Bruin', 'Verkoop'),
('Eva', 'Davis', 'Techniek');

Uitgang:

Als we de volledige naam van de werknemer willen bepalen door de voornaam te nemen en deze aan elkaar te koppelen met de achternaam, kunnen we de functie GROUP_CONCAT() gebruiken, zoals gedemonstreerd in het volgende voorbeeld:

SELECTEER
afdeling,
GROUP_CONCAT(voornaam, ' ', achternaam) AS volledige_naam
VAN
medewerkers
GROEP DOOR
afdeling;

In dit geval gebruiken we de functie om de tekenreeksen uit de kolommen “voornaam” en “achternaam” samen te voegen, en een lege tekenreeks om een ​​spatie aan de namen toe te voegen.

Hier vindt u een lijst met medewerkers van elke afdeling.

STRING_AGG

Deze functie is vergelijkbaar met de functie GROUP_CONCAT(), maar wordt alleen ondersteund in de SQL Server-database.

Een voorbeeldgebruik is als volgt:

SELECTEER
afdeling,
STRING_AGG(voornaam, achternaam, ' ') AS volledige_naam
VAN
medewerkers
GROEP DOOR
afdeling;

Hiermee wordt de tekenreeksaaneenschakeling op de opgegeven kolommen uitgevoerd als spatie als scheidingsteken.

ARRAY_AGG

De functie ARRAY_AGG is alleen beschikbaar in de PostgreSQL-database. Hiermee kunnen we de waarden in één array samenvoegen.

Een voorbeeld is als volgt:

SELECTEER
afdeling,
ARRAY_AGG(voornaam) AS-werknemerslijst
VAN
medewerkers
GROEP DOOR
afdeling;

Dit zou de naam van de werknemer als een array moeten samenvoegen.

LISTAG()

De functie LISTAGG() is alleen beschikbaar in de Oracle-database. Hiermee kunnen we de waarden samenvoegen tot één enkele string met een gespecificeerd scheidingsteken.

Een voorbeeld is als volgt:

SELECT afdeling, LISTAGG(voornaam, achternaam,  ' ') WITHIN GROUP (ORDER BY medewerker_naam ASC) AS medewerkers
VAN medewerkers
GROEP PER afdeling;

Hierdoor worden de namen van de werknemers en het opgegeven scheidingsteken samengevoegd.

Conclusie

In deze zelfstudie leerden we over de tekenreeksaggregaatfuncties waarmee we een lijst met tekenreekswaarden kunnen leveren en een bewerking kunnen uitvoeren in één resulterende tekenreekswaarde.