Funkcja GROUP _CONCAT to funkcja agregująca GROUP BY, która umożliwia łączenie wartości kolumn z wielu wierszy w jedno pole. Zwraca ciąg, jeśli grupa zestawu zawiera jedną lub niezerową wartość kolumny i zwraca wartość NULL, jeśli nie można jej znaleźć.
Ten samouczek nauczy Cię, jak używać funkcji MySQL GROUP_CONCAT() do łączenia ciągów z grupy z kilkoma opcjami.
Podstawowe użycie
Jak już wspomnieliśmy, ta funkcja zwraca wynik w postaci ciągu z wartościami połączonych wartości innych niż null lub NULL, jeśli żadna nie istnieje.
Ogólna składnia to:
GROUP_CONCAT ([ ODRĘBNY ]wyraż[,wyr ...]
[ ZAMÓW PRZEZ wyraż
[ ASC | DESC ] [,nazwa_kolumny ...]]
[SEPARATOR str_val])
Wyjaśnienie
Z powyższej składni widać, że funkcja GROUP_CONCAT używa klauzul i ograniczeń MySQL do określenia różnych opcji:
- ODRĘBNY: Klauzula DISTINCT pomaga usunąć zduplikowane wartości w grupie set przed procesem łączenia. Rozważ nasz samouczek wyjaśniający MySQL DISTINCT, aby zrozumieć, jak to działa.
- ZAMÓW PRZEZ: Następna klauzula to ORDER BY, która pomaga posortować wartości w określonej kolejności. Kolejność może być rosnąca lub malejąca. Jeśli nie określono kolejności, MySQL formatuje wartości w kolejności rosnącej.
- SEPARATOR : Ta klauzula ustawia literał ciągu znaków wstawiany między wartościami grupy w procesie łączenia. Domyślnie MySQL używa przecinka (,) do oddzielenia wartości.
NOTATKA: Wynik ciągu znaków wygenerowany przez funkcję MySQL GROUP_CONCAT() jest ograniczony do długości wartości ustawionej w zmiennej group_concat_max_len. Ta wartość jest zdefiniowana w systemie i ma domyślną wartość 1024. Możesz zmienić tę wartość globalnie lub ustawić ją w sesji, której potrzebujesz.
USTAWIĆ [ ŚWIATOWY | SESJA ]group_concat_max_len= wartość ;Rozważ poniższe odniesienie, aby dowiedzieć się więcej:
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len
Jak to działa: przykład
Pozwólcie, że użyję prostego przykładu, aby wyjaśnić, jak działa funkcja GROUP_CONCAT(). Rozważ tabelę z polem na CHAR jako:
STWÓRZ TABELA concat ( wartość ZWĘGLAĆ );Wstawmy wartości do tabeli, jak pokazano w poniższym zapytaniu:
WSTAWIĆ DO concat ( wartość ) WARTOŚCI ('H'),('ORAZ'),('TEN'),('TEN'),('LUB');Jeśli wykonamy podstawową operację GROUP_CONCAT na wartościach w tabeli, otrzymamy wynik w postaci ciągu, jak pokazano poniżej:
WYBIERZ GROUP_CONCAT ( ODRĘBNY wartość ZAMÓW PRZEZ wartość ASC SEPARATOR'') Z concat ;Wynikowa wartość to:
+ -------------------------------------------------- -------------- +| GROUP_CONCAT ( ODRĘBNY wartość ZAMÓW PRZEZ wartość ASC SEPARATOR'') |
+ -------------------------------------------------- -------------- +
|E H L O|
+ -------------------------------------------------- -------------- +
1wiersz w ustawić (0,01sek)
Czy chcesz w inny sposób zrozumieć, co się stało z powyższym wynikiem?
Zaczynamy od usunięcia wszystkich zduplikowanych wartości z powodu klauzuli MySQL DISTINCT, która usuwa jeden L.
Następnie przechodzimy do ORDER BY rosnącej kolejności zdefiniowanej w (ASC), która zmienia ciąg w postaci
HELO->EHLONa koniec wykonujemy proces konkatenacji, używając spacji jako separatora dla ustawionych wartości, w wyniku czego otrzymujemy łańcuch E H L O z {H, E, L, L O}.
Przykładowe przypadki użycia
Weźmy prawdziwą bazę danych i użyjmy jej, aby zilustrować, jak możemy zaimplementować funkcję GROUP_CONCAT(). W tym przykładzie użyjemy bazy danych Sakila, a konkretnie tabeli adresów z bazy danych Sakila.
Rozważ zasób poniżej, aby pobrać bazę danych dla swoich przykładów:
https://dev.mysql.com/doc/index-other.html
W tabeli adresowej bazy danych Sakila otrzymasz kolumnę okręg. Możemy uzyskać wszystkie unikalne dzielnice oddzielone rurą, jak pokazano w poniższym zapytaniu:
WYBIERZ GROUP_CONCAT ( ODRĘBNY dzielnica ZAMÓW PRZEZ powiat SEPARATOR'|') Z sakila.adres LIMIT 5;Powyższe zapytanie wyświetli wszystkie DISTINCT okręgi i uporządkuje je w porządku rosnącym, oddzielone rurką.
NOTATKA: Funkcja GROUP_CONCAT() jest funkcją agregującą. Dlatego wymagane jest określenie instrukcji ORDER BY wewnątrz funkcji, a nie w instrukcji SELECT.
Wniosek
Funkcja MySQL GROUP_CONCAT() omawiana w tym samouczku jest użyteczną funkcją, która umożliwia tworzenie unikalnych, posortowanych i zorganizowanych danych z tabeli, która może zawierać duplikaty i nieuporządkowane dane.
Zapoznaj się z dokumentacją lub innymi samouczkami MySQL, aby dowiedzieć się więcej.