
Jeśli kiedykolwiek zastanawiałeś się, jak można zapisać wyniki zwracane przez zapytanie SQL w formie tablicy, to ARRAY_AGG jest dokładnie tym, czego potrzebujesz. Ta funkcja agregująca jest niezwykle przydatna, gdy chcemy pogrupować wartości w jedno pole i zwrócić je jako tablicę. W tym artykule omówię, jak działa ARRAY_AGG w języku SQL oraz przedstawię praktyczne przykłady jego zastosowania.
Co to jest ARRAY_AGG?
ARRAY_AGG to funkcja agregująca dostępna w wielu systemach baz danych, takich jak PostgreSQL czy MySQL (od wersji 8.0 z json_arrayagg). Pozwala ona zebrać wartości z jednej kolumny w ramach określonej grupy i zwrócić je w postaci tablicy.
Składnia funkcji ARRAY_AGG
Podstawowa składnia ARRAY_AGG wygląda następująco:
ARRAY_AGG(wyrażenie [ORDER BY sortowanie])
W powyższym zapisie:
wyrażenie– kolumna lub wartość, którą chcemy zebrać w tablicę,ORDER BY– opcjonalnie możemy określić kolejność sortowania wyników w tablicy.
Najprostszy przykład zastosowania ARRAY_AGG
Załóżmy, że mamy tabelę zamowienia z następującymi danymi:
| id_klienta | produkt |
|---|---|
| 1 | Laptop |
| 1 | Mysz |
| 2 | Monitor |
| 2 | Klawiatura |
Aby pobrać listę produktów zakupionych przez każdego klienta jako tablice, wystarczy użyć:
SELECT id_klienta, ARRAY_AGG(produkt) AS zakupione_produkty
FROM zamowienia
GROUP BY id_klienta;
Wynik zapytania:
| id_klienta | zakupione_produkty |
|---|---|
| 1 | {’Laptop’, 'Mysz’} |
| 2 | {’Monitor’, 'Klawiatura’} |
Jak sortować wartości w ARRAY_AGG?
Domyślnie kolejność elementów w tablicy jest nieokreślona. Jeśli chcemy, żeby były one uporządkowane alfabetycznie lub według innego kryterium, możemy skorzystać z ORDER BY wewnątrz funkcji:
SELECT id_klienta, ARRAY_AGG(produkt ORDER BY produkt ASC) AS zakupione_produkty
FROM zamowienia
GROUP BY id_klienta;
Takie zapytanie posegreguje wartości w tablicy alfabetycznie.
Praktyczne zastosowania ARRAY_AGG
Funkcja ARRAY_AGG znajduje zastosowanie w wielu scenariuszach, m.in.:
- Tworzenie listy produktów kupionych przez klienta.
- Agregowanie tagów przypisanych do artykułów na blogu.
- Zbieranie listy nazwisk pracowników w danym dziale.
Przykład dla systemu blogowego:
SELECT artykul_id, ARRAY_AGG(tag) AS tagi
FROM tagi_artykulow
GROUP BY artykul_id;
Konwersja wyniku ARRAY_AGG na tekst
Często chcielibyśmy zwrócić wynik zapytania jako pojedynczy ciąg znaków zamiast tablicy. Możemy połączyć wartości tablicy w jeden ciąg za pomocą string_agg w PostgreSQL:
SELECT id_klienta, STRING_AGG(produkt, ', ') AS zakupione_produkty
FROM zamowienia
GROUP BY id_klienta;
Efekt? Zamiast tablicy zobaczymy następujące wyniki:
| id_klienta | zakupione_produkty |
|---|---|
| 1 | Laptop, Mysz |
| 2 | Monitor, Klawiatura |
Podsumowanie
Funkcja ARRAY_AGG w języku SQL jest niezwykle użyteczna, gdy chcemy grupować wartości w jedną kolumnę w formie tablicy. Możemy ją sortować, konwertować na tekst oraz stosować w wielu różnych scenariuszach. Dzięki niej praca z agregacjami w SQL staje się jeszcze bardziej elastyczna.
Inny ciekawy artykuł:
Jak działa JSON_VALUE 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.

