Funkcja GROUP_CONCAT() w MySQL służy do łączenia danych z wielu wierszy w jedno pole. Jest to funkcja agregująca (GROUP BY), która zwraca a Strunowy wartość, jeśli grupa zawiera co najmniej jedną nie- ZERO wartość. W przeciwnym razie powraca ZERO .
Składnia:
SELECT col1, col2, ..., colN GROUP_CONCAT ( [DISTINCT] col_name1 [ORDER BY clause] [SEPARATOR str_val] ) FROM table_name GROUP BY col_name2;>
Parametry:
- col1, col2, ...colN: To są nazwy kolumn tabeli.
- nazwa_kolumny1: Kolumna tabeli, której wartości są łączone w jednym polu dla każdej grupy.
- Nazwa tabeli: Nazwa tabeli.
- nazwa_kolumny2: Kolumna tabeli, według której przeprowadzane jest grupowanie.
Użycie różnych klauzul wewnątrz GRUPA_CONCAT() funkcjonować
- Odrębny: Eliminuje to powtarzanie wartości z wyniku.
- Zamów przez: Sortuje wartości grupy w określonej kolejności, a następnie łączy je.
- Separator: Domyślnie wartości grupy są oddzielone znakiem ( , ) operatora. Aby zmienić tę wartość separatora, używana jest klauzula Separator, po której następuje literał łańcuchowy. Podaje się jako Separator „str_value” .
Przykłady:
Rozważmy tabelę Pracowników:
| em_id | imię | Imię | id_działu | wytrzymałość |
|---|---|---|---|---|
| 1 | mukesz | gupta | 2 | Przywództwo |
| 3 | neelam | Sharma | 3 | Pracowity, ciężka praca |
| 1 | mukesz | gupta | 2 | Odpowiedzialny |
| 2 | Dewesz | tyagi | 2 | Punktualność |
| 3 | neelam | Sharma | 3 | Samozmotywowany |
| 1 | mukesz | gupta | 2 | Szybko się uczy |
| 4 | keszaw | singal | 3 | Słuchający |
| 2 | Dewesz | tyagi | 2 | Szybko się uczy |
| 5 | zapytać | Jain | 1 | Pracowity, ciężka praca |
| 4 | keszaw | singal | 3 | Krytyczne myślenie |
| 5 | zapytać | Jain | 1 | Zorientowani na cel |
Zapytanie
1. Użycie prostej funkcji GROUP_CONCAT() –
SELECT emp_id, fname, lname, dept_id, GROUP_CONCAT ( strength ) as 'strengths' FROM employee GROUP BY fname;>
Wyjście
| em_id | imię | Imię | id_działu | silne strony |
|---|---|---|---|---|
| 1 | mukesz | gupta | 2 | Przywództwo, Odpowiedzialność, Szybko się uczę |
| 2 | Dewesz | tyagi | 2 | Punktualność, szybko się uczę |
| 3 | neelam | Sharma | 3 | Pracowity, zmotywowany |
| 4 | keszaw | singal | 3 | Słuchanie, krytyczne myślenie |
| 5 | zapytać | Jain | 1 | Pracowity, zorientowany na cel |
2. Stosowanie klauzuli DISTINCT –
Zapytanie
SELECT dept_id, GROUP_CONCAT ( DISTINCT strength) as 'employees strengths' FROM employee GROUP BY dept_id;>
Wyjście
| id_działu | mocne strony pracowników |
|---|---|
| 1 | Zorientowany na cel, pracowity |
| 2 | Przywództwo, Punktualność, Szybko się uczę, Odpowiedzialność |
| 3 | Krytyczne myślenie, pracowitość, słuchanie, motywacja |
3. Zastosowanie klauzuli ORDER BY –
Zapytanie
SELECT dept_id, GROUP_CONCAT ( DISTINCT emp_id ORDER BY emp_id SEPARATOR ', ') as 'employees ids' FROM employee GROUP BY dept_id;>
Tutaj, Separator „,” oddzieli wartości przecinkiem ( , ) i znak odstępu.
Wyjście
| id_działu | identyfikatory pracowników |
|---|---|
| 1 | 5 |
| 2 | 1, 2 |
| 3 | 3. 4 |
Jak połączyć wiele wierszy różnych kolumn w jednym polu?
Do tej pory widzieliśmy użycie funkcji GROUP_CONCAT() do grupowania wartości wielu wierszy należących do tej samej kolumny. Ale używając połączyć() i group_concat() razem, możemy połączyć wartości więcej niż jednej kolumny z różnych wierszy w jedno pole.
Przykład:
Biorąc pod uwagę pracownika z powyższej tabeli, jeśli chcemy znaleźć siłę pracowników wraz z identyfikatorem pracownika w drugim zapytaniu, to jest to zapisane jako-
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;>
Wyjaśnienie:
Powyższe zapytanie składa się z dwóch WYBIERZ instrukcje wewnętrzną i zewnętrzną.
Wewnętrzna instrukcja SELECT-
Zapytanie
SELECT dept_id, concat ( emp_id, ':', GROUP_CONCAT ( strength separator ', ' ) ) as 'strengths' FROM employee GROUP BY dept_id, emp_id>
Pogrupuje wiersze tabeli pracowników według emp_id. Pierwsza kolumna wyświetla dept_id, druga kolumna wyświetla emp_id wraz z listą ich mocnych stron.
Wyjście dla wewnętrznej instrukcji SELECT-
| id_działu | silne strony |
|---|---|
| 2 | 1: Przywództwo, Odpowiedzialność, Szybko się uczę |
| 2 | 2: Punktualność, Szybko się uczę |
| 3 | 3: Pracowity, zmotywowany |
| 3 | 4: Słuchanie, krytyczne myślenie |
| 1 | 5: Pracowity, zorientowany na cel |
Zewnętrzna instrukcja SELECT będzie teraz grupować te wiersze według dept_id.
Wyjście
| id_działu | em-id: mocne strony |
|---|---|
| 1 | 5: Pracowity, zorientowany na cel |
| 2 | 1: Przywództwo, Odpowiedzialność, Szybko się uczy 2: Punktualność, Szybko się uczy |
| 3 | 3: Pracowity, zmotywowany. 4: Słuchanie, Krytyczne myślenie |
Notatka: Wynik funkcji GROUP_CONCAT() jest obcinany do maksymalnej długości, tj 1024 która jest podana przez zmienną systemową group_concat_max_len . Jednakże wartość zmiennej group_concat_max_len można zmienić w czasie wykonywania za pomocą USTAWIĆ polecenie jako-
SET [GLOBAL | SESSION] group_concat_max_len = value; value: It is the new value set to the variable.>