
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 BY
do 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, Tableau i Pythona z certyfikatami + specjalistycznych webinarów z PowerBI.
Ekskluzywana ale pomagająca sobie społeczność.
Ponad 61 godzin materiałów video.
Spotkania LIVE co miesiąc.
Mój osobisty mentoring.