Alguns RDBMSs têm um
GROUP_CONCAT()
função que permite retornar uma coluna de consulta como uma lista delimitada (por exemplo, uma lista separada por vírgulas). MySQL e MariaDB são dois que possuem essa função. PostgreSQL e SQL Server têm funções semelhantes chamadas
STRING_AGG()
. Oracle, por outro lado, tem o
LISTAGG()
função que faz praticamente a mesma coisa (e talvez mais). Então você poderia dizer que
LISTAGG()
é o GROUP_CONCAT()
da Oracle equivalente. Exemplo
Aqui está um exemplo básico para demonstrar como o
LISTAGG()
da Oracle função funciona:SELECT LISTAGG(region_name, ',')
FROM regions;
Resultado:
LISTAGG(REGION_NAME,',') ______________________________________________ Europe,Americas,Asia,Middle East and Africa
Nesse caso, especifiquei que o separador é uma vírgula.
Aqui está o que acontece quando fazemos a consulta sem o
LISTAGG()
função:SELECT region_name
FROM regions;
Resultado:
REGION_NAME _________________________ Europe Americas Asia Middle East and Africa
Recebemos quatro linhas, cada uma com um valor separado, em vez de uma linha separada por vírgulas que contém todos os valores.
O
LISTAGG()
também nos permite ordenar os resultados, retornar apenas valores únicos (através do DISTINCT
cláusula) e muito mais. Veja
LISTAGG()
Function no Oracle para mais exemplos.