
Jeśli kiedykolwiek miałeś do czynienia z bazami danych i językiem SQL, to na pewno spotkałeś się z koniecznością łączenia wartości z kilku wierszy w jedną kolumnę. Właśnie do tego służy funkcja GROUP_CONCAT. Jest to niezwykle przydatna funkcja dostępna w MySQL oraz niektórych innych systemach zarządzania bazami danych. W dzisiejszym artykule wyjaśnię, jak działa GROUP_CONCAT w języku SQL oraz przedstawię praktyczne przykłady jego zastosowania.
Co to jest GROUP_CONCAT?
GROUP_CONCAT to funkcja agregująca dostępna w MySQL, która pozwala na łączenie wartości z wielu wierszy w jedną wartość tekstową. Przydaje się szczególnie w sytuacjach, gdy mamy listę powiązanych rekordów i chcemy je zebrać w jeden ciąg znaków, oddzielony np. przecinkiem.
Podstawowa składnia GROUP_CONCAT
Składnia tej funkcji wygląda następująco:
GROUP_CONCAT([DISTINCT] wyrażenie [ORDER BY sortowanie] [SEPARATOR 'separator'])
Składniki składni:
- DISTINCT – usuwa duplikaty wartości.
- wyrażenie – kolumna lub wartość, którą chcemy skonkatenuować.
- ORDER BY – określa kolejność łączonych wartości.
- SEPARATOR – definiuje separator między wartościami (domyślnie to przecinek).
Prosty przykład użycia GROUP_CONCAT
Wyobraźmy sobie, że mamy tabelę zamówienia, zawierającą zamówienia klientów:
| id | klient_id | produkt |
|---|---|---|
| 1 | 101 | Telefon |
| 2 | 102 | Laptop |
| 3 | 101 | Słuchawki |
Chcielibyśmy uzyskać listę produktów zakupionych przez każdego klienta w jednym wierszu. Możemy to zrobić za pomocą GROUP_CONCAT:
SELECT klient_id, GROUP_CONCAT(produkt SEPARATOR ', ') AS zakupy
FROM zamówienia
GROUP BY klient_id;
Wynik zapytania:
| klient_id | zakupy |
|---|---|
| 101 | Telefon, Słuchawki |
| 102 | Laptop |
Użycie DISTINCT w GROUP_CONCAT
Jeśli w tabeli występują duplikaty i chcemy je usunąć, możemy użyć słowa kluczowego DISTINCT. Załóżmy, że tabela zawiera następujące dane:
| id | klient_id | produkt |
|---|---|---|
| 4 | 101 | Telefon |
| 5 | 101 | Słuchawki |
| 6 | 101 | Telefon |
Zapytanie z użyciem DISTINCT:
SELECT klient_id, GROUP_CONCAT(DISTINCT produkt SEPARATOR ', ') AS zakupy
FROM zamówienia
GROUP BY klient_id;
Wynikiem będzie:
| klient_id | zakupy |
|---|---|
| 101 | Telefon, Słuchawki |
Sortowanie wyników w GROUP_CONCAT
Domyślnie kolejność wartości w wyniku zapytania może być przypadkowa, ale możemy to zmienić dzięki ORDER BY:
SELECT klient_id, GROUP_CONCAT(produkt ORDER BY produkt ASC SEPARATOR ', ') AS zakupy
FROM zamówienia
GROUP BY klient_id;
Powyższe zapytanie posortuje produkty alfabetycznie dla każdego klienta.
Ograniczenie długości zwracanego ciągu
Warto wiedzieć, że długość wyniku funkcji GROUP_CONCAT jest ograniczona przez zmienną systemową group_concat_max_len. Domyślnie w MySQL wynosi ona 1024 bajty. Możemy ją zwiększyć w trakcie sesji:
SET SESSION group_concat_max_len = 10000;
Podsumowanie
GROUP_CONCAT to bardzo przydatna funkcja w MySQL, pozwalająca na agregację danych tekstowych w jednej kolumnie. Dzięki możliwości stosowania DISTINCT, sortowania oraz definiowania separatorów można ją w łatwy sposób dopasować do swoich potrzeb.
Najważniejsze cechy GROUP_CONCAT:
- Pozwala na łączenie wartości wielu wierszy w jedną wartość tekstową.
- Można stosować
DISTINCT, aby eliminować duplikaty. - Obsługuje opcję
ORDER BYdo sortowania wyników. - Można ustawić własny separator między wartościami.
- Jest ograniczony przez wartość
group_concat_max_len, którą można zmienić.
Jeśli pracujesz z MySQL, warto znać i umiejętnie wykorzystywać GROUP_CONCAT, ponieważ znacząco ułatwia pracę z danymi, zwłaszcza w raportach i analizach.
Inny ciekawy artykuł:
Jak działa STRING_AGG w języku SQL? Przykłady zastosowania
Opanuj SQL z moim kursem!
Poznasz zarówno podstawy, jak i zaawansowane zapytania analityczne (CTE, subqueries, window functions). Nauczysz się pracować na różnych silnikach – na kursie pracujemy zarówno na MySQL, jak i na Postgres. Wszystko zainstalujemy na Twoim komputerze, plus dostaniesz mnóstwo zestawów danych do ćwiczeń.
Zostań analitykiem danych – dołącz do KajoDataSpace!
Najlepsza ścieżka do zawodu analityka danych. Dostęp do pełnych wersji kursów online z Excela, SQLa, PowerBI, Tableau i Pythona z certyfikatami!
🟨 Ekskluzywana ale pomagająca sobie społeczność.
🟩 Ponad 75 godzin materiałów video.
🟨 Spotkania LIVE co miesiąc.
🟩 Mój osobisty mentoring.

