Algunos RDBMS tienen un GROUP_CONCAT()
función que le permite devolver una columna de consulta como una lista delimitada (por ejemplo, una lista separada por comas). MySQL y MariaDB son dos que tienen esa función.
PostgreSQL y SQL Server tienen funciones similares llamadas STRING_AGG()
.
Oracle, por otro lado, tiene el LISTAGG()
función que hace más o menos lo mismo (y quizás más).
Así que podrías decir que LISTAGG()
es GROUP_CONCAT()
de Oracle equivalente.
Ejemplo
Aquí hay un ejemplo básico para demostrar cómo LISTAGG()
de Oracle la función funciona:
SELECT LISTAGG(region_name, ',')
FROM regions;
Resultado:
LISTAGG(REGION_NAME,',') ______________________________________________ Europe,Americas,Asia,Middle East and Africa
En este caso, especifiqué que el separador es una coma.
Esto es lo que sucede cuando hacemos la consulta sin LISTAGG()
función:
SELECT region_name
FROM regions;
Resultado:
REGION_NAME _________________________ Europe Americas Asia Middle East and Africa
Obtenemos cuatro filas, cada una con un valor independiente, en lugar de una fila separada por comas que contiene todos los valores.
El LISTAGG()
La función también nos permite ordenar los resultados, devolver solo valores únicos (a través de DISTINCT
cláusula), y más.
Ver LISTAGG()
Función en Oracle para más ejemplos.