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

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

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

  1. Tworzenie listy produktów kupionych przez klienta.
  2. Agregowanie tagów przypisanych do artykułów na blogu.
  3. 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

KajoDataSpace