SQL-strängaggregatfunktioner

Sql Strangaggregatfunktioner



Om du någonsin har sysslat med SQL-databaser är du förmodligen bekant med aggregerade funktioner. De är i huvudsak en uppsättning funktioner som utför beräkningarna på en uppsättning värden och returnerar ett enda resultat.

Ett exempel inkluderar funktioner som SUM(), AVG(), COUNT(), MAX och MIN(). Men en sak du kommer att märka om aggregerade funktioner i SQL är att de är inriktade på numeriska operationer.

Men visste du att det finns aggregerade funktioner som hanterar strängvärden? I den här handledningen kommer vi att titta på dessa funktioner, hur de fungerar och hur vi kan använda dem i våra databaser.







OBS: Det är bra att notera att de flesta funktioner som diskuteras i det här inlägget inte är en del av standard SQL. Som ett resultat är de en förlängning av olika databasmotorer som PostgreSQL, SQL Server, etc.



Vad är strängaggregatfunktioner?

Strängaggregatfunktioner är en uppsättning funktioner som utför aggregeringsoperationerna på en uppsättning strängar inom en grupp eller rader och returnerar ett enda resultat.



Vi använder huvudsakligen dessa funktioner med GROUP BY-satsen för att gruppera raderna baserat på en viss kolumn och sedan aggregera strängarna i varje grupp.





Några vanliga strängaggregatfunktioner inkluderar:

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

Låt oss utforska varje funktion och vad den ger.



GROUP_CONCAT()

GROUP_CONCAT()-funktionen stöds av PostgreSQL- och MySQL-databaser. Det tillåter oss att sammanfoga värden från flera rader till en enda sträng.

Anta att vi har en 'anställda'-tabell enligt följande:

SKAPA BORD anställda (
anställd_id INT AUTO_INCREMENT PRIMÄRNYCKEL,
förnamn VARCHAR(50),
efternamn VARCHAR(50),
avdelning VARCHAR(50)
);

INSERT INTO anställda (first_name, last_name, department) VÄRDEN
('Alice', 'Smith', 'Human Resources'),
('Bob', 'Johnson', 'Marknadsföring'),
('Charlie', 'Wilson', 'Finans'),
('David', 'Brown', 'Försäljning'),
('Eva', 'Davis', 'Engineering');

Produktion:

Om vi ​​vill bestämma den anställdes fullständiga namn genom att ta förnamnet och sammanfoga med efternamnet, kan vi använda funktionen GROUP_CONCAT() som visas i följande exempel:

VÄLJ
avdelning,
GROUP_CONCAT(förnamn, ' ', efternamn) AS fullständigt_namn
FRÅN
anställda
GRUPP AV
avdelning;

I det här fallet använder vi funktionen för att sammanfoga strängarna från kolumnerna 'first_name' och 'last_name', och en tom sträng för att lägga till ett mellanslag till namnen.

Denna innehåller en lista över anställda på varje avdelning.

STRING_AGG

Denna funktion liknar GROUP_CONCAT()-funktionen men den stöds bara i SQL Server-databasen.

Ett exempel på användning är följande:

VÄLJ
avdelning,
STRING_AGG(förnamn, efternamn, ' ') AS fullständigt_namn
FRÅN
anställda
GRUPP AV
avdelning;

Detta utför strängsammansättningen på de angivna kolumnerna som mellanslag som avgränsare.

ARRAY_AGG

ARRAY_AGG-funktionen är endast tillgänglig i PostgreSQL-databasen. Det tillåter oss att aggregera värdena i en enda array.

Ett exempel är följande:

VÄLJ
avdelning,
ARRAY_AGG(first_name) AS anställdas_lista
FRÅN
anställda
GRUPP AV
avdelning;

Detta bör aggregera anställds namn som en array.

LISTAGG()

Funktionen LISTAGG() är endast tillgänglig i Oracle-databasen. Det tillåter oss att sammanfoga värdena till en enda sträng med en specificerad avgränsare.

Ett exempel är följande:

VÄLJ avdelning, LISTAGG(first_name, last_name,  ' ') INOM GRUPPEN (ORDER BY anställd_namn ASC) SOM anställda
FRÅN anställda
GRUPPER EFTER avdelning;

Detta sammanfogar namnen på de anställda och den angivna avgränsaren.

Slutsats

I den här handledningen lärde vi oss om strängaggregatfunktionerna som gör att vi kan tillhandahålla en lista med strängvärden och utföra en operation i ett enda resulterande strängvärde.