MySQL Group Concat for Strings

Mysql Group Concat Strings



GROUP _CONCAT -funktionen är en GROUP BY -aggregeringsfunktion som låter dig sammanfoga kolumnvärden från flera rader till ett enda fält. Det returnerar en sträng om uppsättningsgruppen innehåller ett eller inget noll-kolumnvärde och returnerar ett NULL-värde om inget kan hittas.

Denna handledning lär dig hur du använder MySQL GROUP_CONCAT () -funktionen för att kombinera strängar från en grupp med flera alternativ.







Grundläggande användning

Som vi har nämnt returnerar denna funktion ett strängresultat med värdena för de sammanfogade icke-null-värdena eller en NULL om inga finns.



Den allmänna syntaxen är:



GROUP_CONCAT ([ DISTINKT ]expr[,expr ...]
[ SORTERA EFTER expr
[ ASC | DESC ] [,kolnamn ...]]
[SEPARATOR str_val])

Förklaring

Från syntaxen ovan kan du se att funktionen GROUP_CONCAT använder MySQL -klausuler och begränsningar för att ange de olika alternativen:





  1. DISTINKT: DISTINCT -satsen hjälper till att ta bort dubblettvärdena i uppsättningsgruppen innan sammanfogningsprocessen. Tänk på vår handledning som förklarar MySQL DISTINCT för att förstå hur det fungerar.
  2. SORTERA EFTER: Nästa klausul är ORDER BY som hjälper till att sortera värdena i en angiven ordning. Ordningen kan antingen vara stigande eller fallande. Om ingen ordning har angetts formaterar MySQL värdena i stigande ordning.
  3. SEPARATOR : Denna klausul anger strängen bokstavligen infogad mellan gruppens värden vid sammanfogningsprocessen. Som standard använder MySQL ett komma (,) för att separera värdena.

NOTERA: Strängresultatet som genereras av MySQL GROUP_CONCAT () -funktionen är begränsat till en längd av värdet som anges i variabeln group_concat_max_len. Detta värde definieras i systemet och har ett standardvärde på 1024. Du kan ändra det här värdet globalt eller ställa in det i den session du behöver.

UPPSÄTTNING [ GLOBAL | SESSION ]group_concat_max_len= värde ;

Tänk på referensen nedan för att lära dig mer:



https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len

Hur det fungerar: Exempel

Låt mig använda ett enkelt exempel för att förklara hur funktionen GROUP_CONCAT () fungerar. Betrakta tabellen med ett fält för CHAR som:

SKAPA TABELL konkat ( värde RÖDING );

Låt oss infoga värden i tabellen som visas i frågan nedan:

FÖRA IN IN I konkat ( värde ) VÄRDEN ('H'),('OCH'),('DE'),('DE'),('ELLER');

Om vi ​​utför en grundläggande GROUP_CONCAT -operation på värdena i tabellen får vi ett strängresultat enligt nedan:

VÄLJ GROUP_CONCAT ( DISTINKT värde SORTERA EFTER värde ASC SEPARATOR'') FRÅN konkat ;

Det resulterande värdet är:

+ ------------------------------------------------- -------------- +
| GROUP_CONCAT ( DISTINKT värde SORTERA EFTER värde ASC SEPARATOR'') |
+ ------------------------------------------------- -------------- +
|E H L O|
+ ------------------------------------------------- -------------- +
1rad i uppsättning (0,01sek)

Vill du ha ett annat sätt att förstå vad som hände med resultatet ovan?

Vi börjar med att ta bort alla dubblettvärden på grund av MySQL DISTINCT -satsen som tar bort en L.

Därefter fortsätter vi till ORDER BY stigande ordning enligt definitionen i (ASC), vilket ändrar strängen i form av

HEJ->EHLO

Slutligen utför vi sammanfogningsprocessen med ett mellanslag som separator för de inställda värdena, vilket resulterar i strängen E H L O från {H, E, L, L O}.

Exempel på användningsfall

Låt oss ta en riktig databas och använda den för att illustrera hur vi kan implementera funktionen GROUP_CONCAT (). I det här exemplet kommer vi att använda Sakila -databasen, och specifikt adresstabellen från Sakila -databasen.

Tänk på resursen nedan för att ladda ner databasen för dina exempel:

https://dev.mysql.com/doc/index-other.html

I adresstabellen i Sakila -databasen får du distriktskolumnen. Vi kan få alla unika distrikt åtskilda av ett rör som visas i frågan nedan:

VÄLJ GROUP_CONCAT ( DISTINKT distrikt SORTERA EFTER distrikt SEPARATOR'|') FRÅN sakila.adress BEGRÄNSA 5;

Frågan ovan visar alla DISTINCT -distrikt och ordnar dem i stigande ordning åtskilda av ett rör.

NOTERA: GROUP_CONCAT () -funktionen är en aggregerad funktion. Därför krävs det att du anger ORDER BY -satsen inuti funktionen och inte i SELECT -satsen.

Slutsats

MySQL GROUP_CONCAT () -funktionen som diskuteras i den här självstudien är en användbar funktion som låter dig skapa unika, sorterade och organiserade data från en tabell som kan innehålla dubbletter och orörd data.

Tänk på dokumenten eller våra andra MySQL -handledning för att lära dig mer.