Některé RDBMS mají GROUP_CONCAT()
funkce, která umožňuje vrátit sloupec dotazu jako seznam s oddělovači (například seznam oddělený čárkami). MySQL a MariaDB jsou dvě, které takovou funkci mají.
PostgreSQL a SQL Server mají podobné funkce zvané STRING_AGG()
.
Oracle má na druhé straně LISTAGG()
funkce, která dělá v podstatě to samé (a možná i víc).
Dalo by se tedy říci, že LISTAGG()
je GROUP_CONCAT()
společnosti Oracle ekvivalentní.
Příklad
Zde je základní příklad, který ukazuje, jak LISTAGG()
společnosti Oracle funkce funguje:
SELECT LISTAGG(region_name, ',')
FROM regions;
Výsledek:
LISTAGG(REGION_NAME,',') ______________________________________________ Europe,Americas,Asia,Middle East and Africa
V tomto případě jsem uvedl, že oddělovačem je čárka.
Co se stane, když provedeme dotaz bez LISTAGG()
funkce:
SELECT region_name
FROM regions;
Výsledek:
REGION_NAME _________________________ Europe Americas Asia Middle East and Africa
Dostaneme čtyři řádky, každý se samostatnou hodnotou, namísto jednoho řádku odděleného čárkou, který obsahuje všechny hodnoty.
LISTAGG()
funkce nám také umožňuje seřadit výsledky, vrátit pouze jedinečné hodnoty (přes DISTINCT
doložka) a další.
Viz LISTAGG()
Další příklady najdete v aplikaci Oracle.