Funkcija GROUP_CONCAT() pakalpojumā MySQL tiek izmantota, lai apvienotu datus no vairākām rindām vienā laukā. Šī ir apkopošanas (GROUP BY) funkcija, kas atgriež a Stīga vērtība, ja grupā ir vismaz viens NULL vērtību. Pretējā gadījumā tas atgriežas NULL .
Sintakse:
SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1 [ORDER BY clause] [SEPARATOR str_val] ) FROM table_name GROUP BY col_name2;>
Parametri:
- col1, col2, ...colN: Šie ir tabulas kolonnu nosaukumi.
- col_name1: Tabulas kolonna, kuras vērtības ir apvienotas vienā laukā katrai grupai.
- tabulas_nosaukums: Tabulas nosaukums.
- col_name2: Tabulas kolonna, pēc kuras tiek veikta grupēšana.
Dažādu klauzulu izmantošana iekšpusē GROUP_CONCAT() funkciju
- Atšķirīgs: Tas novērš vērtību atkārtošanos no rezultāta.
- Sakārtot pēc: Tas sakārto grupas vērtības noteiktā secībā un pēc tam saliek tās.
- Atdalītājs: Pēc noklusējuma grupas vērtības tiek atdalītas ar ( , ) operators. Lai mainītu šo atdalītāja vērtību, tiek izmantota klauzula Separator, kam seko virknes literāls. Tas tiek dots kā Atdalītājs str_value .
Piemēri:
cik nulle uz vienu miljonu
Apsveriet darbinieku tabulu:
java un šūpoles
| emp_id | fname | vārds | dept_id | spēks |
|---|---|---|---|---|
| 1 | mukešs | gupta | 2 | Vadība |
| 3 | neelam | sharma | 3 | Smagi strādājošs |
| 1 | mukešs | gupta | 2 | Atbildīgs |
| 2 | Devesh | tyagi | 2 | Punktualitāte |
| 3 | neelam | sharma | 3 | Pašmotivēts |
| 1 | mukešs | gupta | 2 | Ātri apmācāms |
| 4 | keshav | singāls | 3 | Klausīšanās |
| 2 | Devesh | tyagi | 2 | Ātri apmācāms |
| 5 | jautāt | jain | 1 | Smagi strādājošs |
| 4 | keshav | singāls | 3 | Kritiskā domāšana |
| 5 | jautāt | jain | 1 | Uz mērķi orientēts |
Vaicājums
1. Izmantojot vienkāršu funkciju GROUP_CONCAT() -
SELECT emp_id, fname, lname, dept_id, GROUP_CONCAT ( strength ) as 'strengths' FROM employee GROUP BY fname;>
Izvade
| emp_id | fname | vārds | dept_id | stiprās puses |
|---|---|---|---|---|
| 1 | mukešs | gupta | 2 | Vadītājs, atbildīgs, ātri apgūstošs |
| 2 | Devesh | tyagi | 2 | Punktualitāte, ātri apgūstošs |
| 3 | neelam | sharma | 3 | Strādīgs, pašmotivēts |
| 4 | keshav | singāls | 3 | Klausīšanās, kritiskā domāšana |
| 5 | jautāt | jain | 1 | Strādīgs, uz mērķi orientēts |
2. Izmantojot DISTINCT klauzulu –
Vaicājums
SELECT dept_id, GROUP_CONCAT ( DISTINCT strength) as 'employees strengths' FROM employee GROUP BY dept_id;>
Izvade
| dept_id | darbinieku stiprās puses |
|---|---|
| 1 | Mērķtiecīgs, strādīgs |
| 2 | Līderība, punktualitāte, ātri apgūstošs, atbildīgs |
| 3 | Kritiskā domāšana, strādīgs, klausošs, pašmotivēts |
3. Klauzulas ORDER BY izmantošana –
Vaicājums
SELECT dept_id, GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id SEPARATOR ', ') as 'employees ids' FROM employee GROUP BY dept_id;>
Šeit, Atdalītājs ', ' atdalīs vērtības ar komatu ( , ) un atstarpes rakstzīmi.
Izvade
| dept_id | darbinieku ID |
|---|---|
| 1 | 5 |
| 2 | 1, 2 |
| 3 | 3. 4 |
Kā vienā laukā savienot vairākas dažādu kolonnu rindas?
Līdz šim mēs esam redzējuši funkcijas GROUP_CONCAT() izmantošanu, lai grupētu vairāku rindu vērtības, kas pieder vienai kolonnai. Bet, izmantojot concat () funkcija un grupa_concat() kopā, mēs varam apvienot vairāk nekā vienas kolonnas vērtības dažādās rindās vienā laukā.
nulles
Piemērs:
Ņemot vērā iepriekš minēto tabulu darbinieku, ja mēs vēlamies atrast darbinieku spēku kopā ar darbinieku ID otrajā vaicājumā, tas tiek rakstīts šādi:
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;>
Paskaidrojums:
Iepriekš minētais vaicājums sastāv no diviem SELECT paziņojumus iekšējo un ārējo.
Iekšējais SELECT paziņojums-
np kur
Vaicājums
SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths' FROM employee GROUP BY dept_id, emp_id>
Tas grupēs darbinieku tabulas rindas atbilstoši emp_id. Pirmajā iegūtajā kolonnā tiek parādīts dept_id, otrajā kolonnā tiek parādīts emp_id kopā ar to stipro pušu sarakstu.
Izvade iekšējam SELECT priekšrakstam-
| dept_id | stiprās puses |
|---|---|
| 2 | 1: Līderība, atbildīgs, ātri apgūstošs |
| 2 | 2: punktualitāte, ātri apgūstošs |
| 3 | 3: strādīgs, pašmotivēts |
| 3 | 4: klausīšanās, kritiskā domāšana |
| 1 | 5: strādīgs, uz mērķi orientēts |
Ārējais SELECT priekšraksts tagad grupēs šīs rindas atbilstoši dept_id.
Izvade
| dept_id | emp-id: stiprās puses |
|---|---|
| 1 | 5: strādīgs, uz mērķi orientēts |
| 2 | 1: vadība, atbildīgs, ātri apgūstošs 2: punktualitāte, ātri apgūstošs |
| 3 | 3: strādīgs, pašmotivēts 4: klausīšanās, kritiska domāšana |
Piezīme: Funkcijas GROUP_CONCAT() rezultāts tiek saīsināts līdz maksimālajam garumam, t.i 1024 ko dod sistēmas mainīgais group_concat_max_len . Tomēr mainīgā group_concat_max_len vērtību izpildes laikā var mainīt, izmantojot IESTATĪT komandēt kā-
SET [GLOBAL | SESSION] group_concat_max_len = value; value: It is the new value set to the variable.>