Niektóre RDBMS mają funkcję GROUP_CONCAT()
funkcja, która umożliwia zwrócenie kolumny zapytania jako listy rozdzielanej (na przykład listy rozdzielanej przecinkami). MySQL i MariaDB to dwa, które mają taką funkcję.
PostgreSQL i SQL Server mają podobne funkcje o nazwie STRING_AGG()
.
Z drugiej strony Oracle ma LISTAGG()
funkcja, która robi prawie to samo (a może nawet więcej).
Można więc powiedzieć, że LISTAGG()
to GROUP_CONCAT()
Oracle odpowiednik.
Przykład
Oto podstawowy przykład demonstrujący, jak Oracle LISTAGG()
funkcja działa:
SELECT LISTAGG(region_name, ',')
FROM regions;
Wynik:
LISTAGG(REGION_NAME,',') ______________________________________________ Europe,Americas,Asia,Middle East and Africa
W tym przypadku określiłem, że separatorem jest przecinek.
Oto, co się dzieje, gdy wykonujemy zapytanie bez LISTAGG()
funkcja:
SELECT region_name
FROM regions;
Wynik:
REGION_NAME _________________________ Europe Americas Asia Middle East and Africa
Otrzymujemy cztery wiersze, każdy z oddzielną wartością, zamiast jednego wiersza oddzielonego przecinkami, który zawiera wszystkie wartości.
LISTAGG()
funkcja umożliwia nam również porządkowanie wyników, zwracanie tylko unikalnych wartości (poprzez DISTINCT
klauzula) i nie tylko.
Zobacz LISTAGG()
Funkcja w Oracle, aby uzyskać więcej przykładów.