De functie GROUP_CONCAT() in MySQL wordt gebruikt om gegevens uit meerdere rijen samen te voegen in één veld. Dit is een aggregatiefunctie (GROUP BY) die a retourneert Snaar waarde als de groep ten minste één niet- NUL waarde. Anders keert het terug NUL .
Syntaxis:
SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1 [ORDER BY clause] [SEPARATOR str_val] ) FROM table_name GROUP BY col_name2;>
Parameters:
rdbms-normalisatie
- col1, col2, ...colN: Dit zijn de kolomnamen van de tabel.
- kolomnaam1: Kolom van de tabel waarvan de waarden voor elke groep in één veld zijn samengevoegd.
- tafel naam: Naam van tafel.
- kolomnaam2: Kolom van de tabel volgens welke groepering wordt uitgevoerd.
Gebruik van verschillende clausules binnenin GROUP_CONCAT() functie
- Verschillend: Het elimineert de herhaling van waarden uit het resultaat.
- Bestel per: Het sorteert de waarden van de groep in een specifieke volgorde en voegt ze vervolgens samen.
- scheidingsteken: Standaard worden de waarden van de groep gescheiden door de ( , ) exploitant. Om deze scheidingswaarde te wijzigen, wordt een scheidingsclausule gebruikt, gevolgd door een letterlijke tekenreeks. Het wordt gegeven als Scheidingsteken ‘str_value’ .
Voorbeelden:
Laten we eens kijken naar een werknemerstabel:
| emp_id | fnaam | Iknaam | afdeling_id | kracht |
|---|---|---|---|---|
| 1 | mukesh | gupta | 2 | Leiderschap |
| 3 | Neelam | sharma | 3 | Hardwerkend |
| 1 | mukesh | gupta | 2 | Verantwoordelijk |
| 2 | Devesj | tyagi | 2 | Stiptheid |
| 3 | Neelam | sharma | 3 | Zelf gemotiveerd |
| 1 | mukesh | gupta | 2 | Snelle leerling |
| 4 | keshav | singaal | 3 | Luisteren |
| 2 | Devesj | tyagi | 2 | Snelle leerling |
| 5 | vragen | Jain | 1 | Hardwerkend |
| 4 | keshav | singaal | 3 | Kritisch denken |
| 5 | vragen | Jain | 1 | Doelgericht |
Vraag
1. Met behulp van de eenvoudige GROUP_CONCAT() functie –
SELECT emp_id, fname, lname, dept_id, GROUP_CONCAT ( strength ) as 'strengths' FROM employee GROUP BY fname;>
Uitvoer
| emp_id | fnaam | Iknaam | afdeling_id | sterke punten |
|---|---|---|---|---|
| 1 | mukesh | gupta | 2 | Leiderschap, verantwoordelijk, snelle leerling |
| 2 | Devesj | tyagi | 2 | Stiptheid, snelle leerling |
| 3 | Neelam | sharma | 3 | Hardwerkend, gemotiveerd |
| 4 | keshav | singaal | 3 | Luisteren, kritisch denken |
| 5 | vragen | Jain | 1 | Hardwerkend, doelgericht |
2. Een DISTINCT-clausule gebruiken –
Java-tekenreeks is leeg
Vraag
SELECT dept_id, GROUP_CONCAT ( DISTINCT strength) as 'employees strengths' FROM employee GROUP BY dept_id;>
Uitvoer
| afdeling_id | sterke punten van medewerkers |
|---|---|
| 1 | Doelgericht, Hardwerkend |
| 2 | Leiderschap, stiptheid, snelle leerling, verantwoordelijk |
| 3 | Kritisch denken, hard werken, luisteren, gemotiveerd |
3. Gebruik van ORDER BY-clausule –
Vraag
SELECT dept_id, GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id SEPARATOR ', ') as 'employees ids' FROM employee GROUP BY dept_id;>
Hier, Scheidingsteken ‘, ‘ scheidt de waarden door een komma ( , ) en een witruimteteken.
Uitvoer
| afdeling_id | medewerkers ID's |
|---|---|
| 1 | 5 |
| 2 | 1, 2 |
| 3 | 3. 4 |
Hoe meerdere rijen van verschillende kolommen in één veld samenvoegen?
Tot nu toe hebben we het gebruik van de functie GROUP_CONCAT() gezien om de waarden van meerdere rijen die tot dezelfde kolom behoren te groeperen. Maar, gebruiken concat() function en group_concat() functioneren samen, kunnen we meer dan één kolomwaarden van verschillende rijen combineren in één veld.
Voorbeeld:
Als we de werknemer hierboven in ogenschouw nemen, als we de kracht van werknemers samen met de werknemers-ID in de tweede zoekopdracht willen vinden, dan wordt dit geschreven als:
SELECT dept_id, GROUP_CONCAT ( strengths SEPARATOR ' ') as 'emp-id : strengths' FROM ( SELECT dept_id, CONCAT ( emp_id, ':', GROUP_CONCAT(strength SEPARATOR', ') ) as 'strengths' FROM employee GROUP BY emp_id ) as emp GROUP BY dept_id;>
Uitleg:
De bovenstaande vraag bestaat uit twee SELECT-instructies een binnenste en een buitenste.
De innerlijke SELECT-instructie-
Vraag
SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths' FROM employee GROUP BY dept_id, emp_id>
Het zal de rijen van de werknemerstabel groeperen op basis van emp_id. De eerste resulterende kolom toont dept_id, de tweede kolom toont emp_id samen met hun lijst met sterke punten.
sites zoals coomeet
Uitvoer voor innerlijke SELECT-instructie-
| afdeling_id | sterke punten |
|---|---|
| 2 | 1: Leiderschap, verantwoordelijk, snelle leerling |
| 2 | 2: Punctualiteit, snelle leerling |
| 3 | 3: Hardwerkend, gemotiveerd |
| 3 | 4: Luisteren, kritisch denken |
| 1 | 5: Hardwerkend, doelgericht |
De buitenste SELECT-instructie groepeert deze rijen nu op basis van dept_id.
Uitvoer
| afdeling_id | emp-id: sterke punten |
|---|---|
| 1 | 5: Hardwerkend, doelgericht |
| 2 | 1: Leiderschap, verantwoordelijk, snelle leerling 2: Stiptheid, snelle leerling |
| 3 | 3: Hardwerkend, gemotiveerd. 4: Luisteren, kritisch denken |
Opmerking: Het resultaat van de functie GROUP_CONCAT() wordt afgekapt tot de maximale lengte, d.w.z 1024 die wordt gegeven door de systeemvariabele group_concat_max_len . De waarde van de variabele group_concat_max_len kan echter tijdens runtime worden gewijzigd met behulp van SET commando als-
SET [GLOBAL | SESSION] group_concat_max_len = value; value: It is the new value set to the variable.>