
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, 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.