MySQL Group Concat for Strings

Mysql Group Concat Strings



GROUP _CONCAT -funksjonen er en GROUP BY -aggregeringsfunksjon som lar deg sammenkoble kolonneverdier fra flere rader til et enkelt felt. Den returnerer en streng hvis settgruppen inneholder en eller ingen null-kolonneverdi og returnerer en NULL-verdi hvis ingen kan bli funnet.

Denne opplæringen lærer deg hvordan du bruker MySQL GROUP_CONCAT () -funksjonen til å kombinere strenger fra en gruppe med flere alternativer.







Grunnleggende bruk

Som vi har nevnt, returnerer denne funksjonen et strengresultat med verdiene til de sammenkoplede ikke-nullverdiene eller en NULL hvis ingen eksisterer.



Den generelle syntaksen er:



GROUP_CONCAT ([ DISTINKT ]ekspr[,uttrykk ...]
[ REKKEFØLGE ETTER ekspr
[ ASC | DESC ] [,col_name ...]]
[SEPARATOR str_val])

Forklaring

Fra syntaksen ovenfor kan du se at GROUP_CONCAT -funksjonen bruker MySQL -setninger og begrensninger for å spesifisere de forskjellige alternativene:





  1. DISTINKT: DISTINCT -leddet hjelper til med å fjerne duplikatverdiene i den angitte gruppen før sammenkoblingsprosessen. Vurder vår opplæring som forklarer MySQL DISTINCT for å forstå hvordan det fungerer.
  2. REKKEFØLGE ETTER: Den neste klausulen er ORDER BY som hjelper til med å sortere verdiene i en spesifisert rekkefølge. Rekkefølgen kan enten være stigende eller synkende. Hvis det ikke er angitt noen ordre, formaterer MySQL verdiene i stigende rekkefølge.
  3. SEPARATOR : Denne klausulen setter strengen bokstavelig talt satt inn mellom gruppens verdier ved sammenkoblingsprosessen. Som standard bruker MySQL et komma (,) for å skille verdiene.

MERK: Strengresultatet generert av MySQL GROUP_CONCAT () -funksjonen er begrenset til en lengde på verdien som er satt i variabelen group_concat_max_len. Denne verdien er definert i systemet og har en standardverdi på 1024. Du kan endre denne verdien globalt eller angi den i økten du trenger.

SETT [ GLOBAL | ØKT ]group_concat_max_len= verdi ;

Vurder referansen nedenfor for å lære mer:



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

Slik fungerer det: Eksempel

Tillat meg å bruke et enkelt eksempel for å forklare hvordan GROUP_CONCAT () -funksjonen fungerer. Tenk på tabellen med et felt for CHAR som:

SKAPE BORD konkat ( verdi CHAR );

La oss sette inn verdier i tabellen som vist i spørringen nedenfor:

SETT INN INN I konkat ( verdi ) VERDIER ('H'),('OG'),('DE'),('DE'),('ELLER');

Hvis vi utfører en grunnleggende GROUP_CONCAT -operasjon på verdiene i tabellen, får vi et strengresultat som vist nedenfor:

PLUKKE UT GROUP_CONCAT ( DISTINKT verdi REKKEFØLGE ETTER verdi ASC SEPARATOR'') FRA konkat ;

Den resulterende verdien er:

+ ------------------------------------------------- -------------- +
| GROUP_CONCAT ( DISTINKT verdi REKKEFØLGE ETTER verdi ASC SEPARATOR'') |
+ ------------------------------------------------- -------------- +
|E H L O|
+ ------------------------------------------------- -------------- +
1rad i sett (0,01sek)

Vil du ha en annen måte å forstå hva som skjedde med resultatet ovenfor?

Vi starter med å fjerne alle dupliserte verdier på grunn av MySQL DISTINCT -klausulen som fjerner en L.

Deretter går vi videre til ORDER BY ascending order som definert i (ASC), som endrer strengen i form av

HELO->EHLO

Til slutt utfører vi sammenkoplingsprosessen ved å bruke et mellomrom som separator for de angitte verdiene, noe som resulterer i strengen E H L O fra {H, E, L, L O}.

Eksempel på brukstilfeller

La oss ta en ekte database og bruke den til å illustrere hvordan vi kan implementere GROUP_CONCAT () -funksjonen. I dette eksemplet vil vi bruke Sakila -databasen, og spesifikt adressetabellen fra Sakila -databasen.

Vurder ressursen nedenfor for å laste ned databasen for eksemplene dine:

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

I adressetabellen i Sakila -databasen får du distriktskolonnen. Vi kan få alle de unike distriktene skilt med et rør som vist i spørringen nedenfor:

PLUKKE UT GROUP_CONCAT ( DISTINKT distrikt REKKEFØLGE ETTER distrikt SEPARATOR'|') FRA sakila.adresse GRENSE 5;

Spørringen ovenfor viser alle DISTINCT -distriktene og ordner dem i stigende rekkefølge atskilt med et rør.

MERK: GROUP_CONCAT () -funksjonen er en samlet funksjon. Derfor er det nødvendig at du spesifiserer ORDER BY -setningen inne i funksjonen og ikke i SELECT -setningen.

Konklusjon

MySQL GROUP_CONCAT () -funksjonen som er omtalt i denne opplæringen, er en nyttig funksjon som lar deg lage unike, sorterte og organiserte data fra en tabell som kan inneholde duplikater og uordnede data.

Vurder dokumentene eller våre andre MySQL -opplæringsprogrammer for å lære mer.