MySQL Group Concat voor snaren

Mysql Group Concat Strings



De functie GROUP _CONCAT is een GROUP BY-aggregatiefunctie waarmee u kolomwaarden van meerdere rijen in één veld kunt samenvoegen. Het retourneert een tekenreeks als de set-groep één of niet-null kolomwaarde bevat en retourneert een NULL-waarde als er geen kan worden gevonden.

Deze tutorial leert je hoe je de MySQL GROUP_CONCAT() functie gebruikt om strings uit een groep te combineren met verschillende opties.







Basisgebruik

Zoals we hebben vermeld, retourneert deze functie een tekenreeksresultaat met de waarden van de aaneengeschakelde niet-null-waarden of een NULL als er geen bestaat.



De algemene syntaxis is:



GROUP_CONCAT ([ VERSCHILLEND ]expr[,exp ...]
[ BESTEL DOOR expr
[ ASC | DESC ] [,col_name ...]]
[SEPARATOR str_val])

Uitleg

Uit de bovenstaande syntaxis kunt u zien dat de GROUP_CONCAT-functie MySQL-clausules en -beperkingen gebruikt om de verschillende opties op te geven:





  1. VERSCHILLEND: De clausule DISTINCT helpt bij het verwijderen van de dubbele waarden in de setgroep vóór het aaneenschakelingsproces. Bekijk onze tutorial waarin MySQL DISTINCT wordt uitgelegd om te begrijpen hoe het werkt.
  2. BESTEL DOOR: De volgende clausule is de ORDER BY die helpt bij het sorteren van de waarden in een opgegeven volgorde. De volgorde kan oplopend of aflopend zijn. Als er geen volgorde is opgegeven, formatteert MySQL de waarden in oplopende volgorde.
  3. SCHEIDER : Deze clausule stelt de letterlijke tekenreeks in die tussen de waarden van de groep wordt ingevoegd tijdens het aaneenschakelingsproces. Standaard gebruikt MySQL een komma (,) om de waarden te scheiden.

OPMERKING: Het tekenreeksresultaat gegenereerd door de MySQL GROUP_CONCAT()-functie is beperkt tot een lengte van de waarde die is ingesteld in de variabele group_concat_max_len. Deze waarde is gedefinieerd in het systeem en heeft een standaardwaarde van 1024. Je kunt deze waarde globaal wijzigen of instellen in de sessie die je nodig hebt.

SET [ GLOBAAL | SESSIE ]group_concat_max_len= waarde ;

Bekijk de onderstaande referentie voor meer informatie:



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

Hoe het werkt: Voorbeeld

Sta me toe een eenvoudig voorbeeld te gebruiken om uit te leggen hoe de functie GROUP_CONCAT() werkt. Beschouw de tabel met een veld voor CHAR als:

CREËREN TAFEL samenvoegen ( waarde CHAR );

Laten we waarden invoegen in de tabel zoals weergegeven in de onderstaande query:

INSERT NAAR BINNEN samenvoegen ( waarde ) WAARDEN ('H'),('EN'),('DE'),('DE'),('OF');

Als we een basisbewerking GROUP_CONCAT uitvoeren op de waarden in de tabel, krijgen we een tekenreeksresultaat zoals hieronder weergegeven:

KIES GROUP_CONCAT ( VERSCHILLEND waarde BESTEL DOOR waarde ASC SCHEIDER'') VAN samenvoegen ;

De resulterende waarde is:

+ ------------------------------------------------- -------------- +
| GROUP_CONCAT ( VERSCHILLEND waarde BESTEL DOOR waarde ASC SCHEIDER'') |
+ ------------------------------------------------- -------------- +
|E H L O|
+ ------------------------------------------------- -------------- +
1rij in set (0,01sec)

Wilt u op een andere manier begrijpen wat er met het bovenstaande resultaat is gebeurd?

We beginnen met het verwijderen van alle dubbele waarden vanwege de MySQL DISTINCT-clausule die één L.

Vervolgens gaan we verder met ORDER BY oplopende volgorde zoals gedefinieerd in (ASC), die de string verandert in de vorm van

HALLO->EHLO

Ten slotte voeren we het aaneenschakelingsproces uit met een spatie als scheidingsteken voor de ingestelde waarden, wat resulteert in de tekenreeks E H L O van {H, E, L, L O}.

Voorbeelden van gebruiksscenario's

Laten we een echte database nemen en deze gebruiken om te illustreren hoe we de functie GROUP_CONCAT() kunnen implementeren. In dit voorbeeld gebruiken we de Sakila-database, en in het bijzonder de adressentabel uit de Sakila-database.

Overweeg de onderstaande bron om de database voor uw voorbeelden te downloaden:

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

In de adressentabel van de Sakila-database vindt u de wijkkolom. We kunnen alle unieke districten scheiden door een pijp, zoals weergegeven in de onderstaande query:

KIES GROUP_CONCAT ( VERSCHILLEND wijk BESTEL DOOR wijk SEPARATOR'|') VAN sakila.adres BEGRENZING 5;

De bovenstaande query toont alle DISTINCT-districten en rangschikt ze in oplopende volgorde, gescheiden door een pijp.

OPMERKING: De functie GROUP_CONCAT() is een aggregatiefunctie. Daarom is het vereist dat u de ORDER BY-instructie in de functie opgeeft en niet in de SELECT-instructie.

Conclusie

De functie MySQL GROUP_CONCAT() die in deze zelfstudie wordt besproken, is een handige functie waarmee u unieke, gesorteerde en georganiseerde gegevens kunt maken uit een tabel die dubbele en ongeordende gegevens kan bevatten.

Bekijk de documenten of onze andere MySQL-zelfstudies voor meer informatie.