
STRING_AGG to jedna z tych funkcji w SQL, która może znacząco ułatwić życie każdemu, kto pracuje z danymi tekstowymi. Jeśli kiedykolwiek musiałeś połączyć wartości z kilku wierszy w jednej kolumnie w jedną całość, wiesz, jak uciążliwe może być stosowanie do tego celu starych metod. Właśnie w takich sytuacjach przydaje się STRING_AGG.
Czym jest STRING_AGG i jak działa?
STRING_AGG to funkcja agregująca dostępna w SQL Server (od wersji 2017) i PostgreSQL. Jej głównym zadaniem jest łączenie wielu wartości (ciągów znaków z różnych wierszy) w jeden ciąg, przy użyciu określonego separatora.
Ogólna składnia funkcji wygląda tak:
STRING_AGG(wyrażenie, separator) [WITHIN GROUP (ORDER BY kolumna ASC/DESC)]
- wyrażenie – kolumna lub wartość, którą chcemy połączyć.
- separator – znak lub ciąg znaków, który będzie rozdzielać połączone wartości.
- ORDER BY (opcjonalne) – pozwala określić kolejność łączenia wartości.
Prosty przykład zastosowania STRING_AGG
Załóżmy, że mamy tabelę Uzytkownicy
z następującymi danymi:
ID | Imie | Miasto |
---|---|---|
1 | Jan | Warszawa |
2 | Anna | Kraków |
3 | Piotr | Warszawa |
Chcemy uzyskać listę imion użytkowników poszczególnych miast w formie jednego łańcucha. Możemy to zrobić tak:
SELECT Miasto, STRING_AGG(Imie, ', ') AS Lista_Imion
FROM Uzytkownicy
GROUP BY Miasto;
Wynik zapytania:
Miasto | Lista_Imion |
---|---|
Warszawa | Jan, Piotr |
Kraków | Anna |
Zmiana kolejności wyników za pomocą ORDER BY
STRING_AGG pozwala również kontrolować kolejność łączenia danych. Jeśli chcemy posortować imiona alfabetycznie w ramach grupy, możemy użyć WITHIN GROUP (ORDER BY ...)
:
SELECT Miasto,
STRING_AGG(Imie, ', ') WITHIN GROUP (ORDER BY Imie ASC) AS Lista_Imion
FROM Uzytkownicy
GROUP BY Miasto;
Teraz lista imion dla Warszawy będzie posortowana w kolejności: Jan, Piotr
.
STRING_AGG w PostgreSQL
W PostgreSQL funkcja STRING_AGG działa bardzo podobnie, ale zapisy wygląda nieco inaczej:
SELECT Miasto,
STRING_AGG(Imie, ', ' ORDER BY Imie ASC) AS Lista_Imion
FROM Uzytkownicy
GROUP BY Miasto;
W przypadku PostgreSQL kolejność sortowania jest określana bezpośrednio w wywołaniu STRING_AGG
bez dodatkowej klauzuli WITHIN GROUP
.
Obsługa wartości NULL
Jeśli tabela zawiera wartości NULL, STRING_AGG domyślnie je ignoruje. Na przykład:
INSERT INTO Uzytkownicy (ID, Imie, Miasto) VALUES (4, NULL, 'Warszawa');
Zapytanie:
SELECT Miasto, STRING_AGG(Imie, ', ') AS Lista_Imion
FROM Uzytkownicy
GROUP BY Miasto;
Ignoruje NULL i zwraca tylko dostępne wartości.
Zastosowanie w praktyce
STRING_AGG jest bardzo przydatny w:
- Generowaniu raportów, gdzie dane powinny być zwracane w jednym polu.
- Tworzeniu listy tagów lub kategorii dla użytkowników.
- Zagnieżdżaniu połączonych wartości w JSON lub XML.
Podsumowanie
STRING_AGG to potężna funkcja, która pozwala w prosty sposób połączyć wiele wartości w jeden ciąg znaków. Jest dużo bardziej czytelna i wydajna niż wcześniejsze metody bazujące na XML PATH czy łączeniu STRING + COALESCE. Dzięki obsłudze sortowania wyników oraz ignorowania wartości NULL, można dopasować jej działanie do konkretnych potrzeb. Jeśli jeszcze jej nie używasz – zdecydowanie warto ją poznać!
Inny ciekawy artykuł:
Jak działa MAX 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.