Jak działa GROUP_CONCAT w języku SQL? Przykłady zastosowania

Jak działa GROUP_CONCAT w języku SQL? Przykłady zastosowania

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

KajoDataSpace