MySQL Group Concat for Strings

Mysql Group Concat Strings



GROUP _CONCAT -funktionen er en GROUP BY -aggregatfunktion, der giver dig mulighed for at sammenkoble kolonneværdier fra flere rækker til et enkelt felt. Det returnerer en streng, hvis den indstillede gruppe indeholder en eller ingen nul-kolonneværdi og returnerer en NULL-værdi, hvis ingen kan findes.

Denne vejledning lærer dig, hvordan du bruger MySQL GROUP_CONCAT () -funktionen til at kombinere strenge fra en gruppe med flere muligheder.







Grundlæggende brug

Som vi har nævnt, returnerer denne funktion et strengresultat med værdierne for de sammenkædede ikke-null-værdier eller en NULL, hvis der ikke findes nogen.



Den generelle syntaks er:



GROUP_CONCAT ([ DISTINCT ]eksp[,eksp ...]
[ BESTIL AF eksp
[ ASC | DESC ] [,col_name ...]]
[SEPARATOR str_val])

Forklaring

Fra ovenstående syntaks kan du se, at GROUP_CONCAT -funktionen bruger MySQL -klausuler og begrænsninger til at angive de forskellige muligheder:





  1. DISTINCT: DISTINCT -klausulen hjælper med at fjerne de dobbelte værdier i den indstillede gruppe før sammenkædningsprocessen. Overvej vores tutorial, der forklarer MySQL DISTINCT for at forstå, hvordan det fungerer.
  2. BESTIL AF: Den næste klausul er ORDER BY, der hjælper med at sortere værdierne i en bestemt rækkefølge. Ordren kan enten være stigende eller faldende. Hvis der ikke er angivet nogen ordre, formaterer MySQL værdierne i stigende rækkefølge.
  3. SEPARATOR : Denne klausul sætter strengen bogstaveligt mellem gruppens værdier ved sammenkædningsprocessen. Som standard bruger MySQL et komma (,) til at adskille værdierne.

BEMÆRK: Strengresultatet, der genereres af funktionen MySQL GROUP_CONCAT (), er begrænset til en længde, der er angivet i variablen group_concat_max_len. Denne værdi er defineret i systemet og har en standardværdi på 1024. Du kan ændre denne værdi globalt eller angive den i den session, du har brug for.

SÆT [ GLOBAL | SESSION ]group_concat_max_len= værdi ;

Overvej referencen herunder for at lære mere:



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

Sådan fungerer det: Eksempel

Tillad mig at bruge et enkelt eksempel til at forklare, hvordan funktionen GROUP_CONCAT () fungerer. Betragt tabellen med et felt for CHAR som:

SKAB BORD konkat ( værdi CHAR );

Lad os indsætte værdier i tabellen som vist i forespørgslen herunder:

INDSÆT IND I konkat ( værdi ) VÆRDIER ('H'),('OG'),('DET'),('DET'),('ELLER');

Hvis vi udfører en grundlæggende GROUP_CONCAT -handling på værdierne i tabellen, får vi et strengresultat som vist nedenfor:

VÆLG GROUP_CONCAT ( DISTINCT værdi BESTIL AF værdi ASC SEPARATOR'') FRA konkat ;

Den resulterende værdi er:

+ ------------------------------------------------- -------------- +
| GROUP_CONCAT ( DISTINCT værdi BESTIL AF værdi ASC SEPARATOR'') |
+ ------------------------------------------------- -------------- +
|E H L O|
+ ------------------------------------------------- -------------- +
1række i sæt (0,01sek)

Vil du have en anden måde at forstå, hvad der skete med resultatet ovenfor?

Vi starter med at fjerne alle de dublerede værdier på grund af MySQL DISTINCT -klausulen, der fjerner en L.

Dernæst går vi videre til ORDER BY ascending order som defineret i (ASC), som ændrer strengen i form af

HELO->EHLO

Endelig udfører vi sammenkædningsprocessen ved hjælp af et mellemrum som separator for de indstillede værdier, hvilket resulterer i strengen E H L O fra {H, E, L, L O}.

Eksempel på brugssager

Lad os tage en rigtig database og bruge den til at illustrere, hvordan vi kan implementere funktionen GROUP_CONCAT (). I dette eksempel vil vi bruge Sakila -databasen og specifikt adressetabellen fra Sakila -databasen.

Overvej nedenstående ressource for at downloade databasen til dine eksempler:

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

I adressetabellen i Sakila -databasen får du distriktskolonnen. Vi kan få alle de unikke distrikter adskilt af et rør som vist i forespørgslen herunder:

VÆLG GROUP_CONCAT ( DISTINCT distrikt BESTIL AF distrikt SEPARATOR'|') FRA sakila.adresse BEGRÆNSE 5;

Forespørgslen ovenfor viser alle DISTINCT -distrikterne og ordner dem i stigende rækkefølge adskilt af et rør.

BEMÆRK: GROUP_CONCAT () -funktionen er en samlet funktion. Derfor er det påkrævet, at du angiver ORDER BY -sætningen inde i funktionen og ikke i SELECT -sætningen.

Konklusion

MySQL GROUP_CONCAT () funktion diskuteret i denne vejledning er en nyttig funktion, der giver dig mulighed for at oprette unikke, sorterede og organiserede data fra en tabel, der kan indeholde dubletter og uordnede data.

Overvej dokumenterne eller vores andre MySQL -øvelser for at lære mere.