- Categorias:
Funções de agregação (Dados semiestruturados) , Funções de janela (Geral) , Funções de dados semiestruturados e estruturados (Matriz/objeto)
ARRAY_AGG¶
Retorna os valores de entrada, articulados em uma matriz. Se a entrada estiver vazia, a função retornará uma matriz vazia.
- Aliases:
ARRAYAGG
Sintaxe¶
Função de agregação
Função de janela
Argumentos¶
Obrigatório:
expr1Uma expressão (normalmente um nome de coluna) que determina os valores a serem colocados na matriz.
OVER()A cláusula OVER especifica que a função está sendo usada como uma função de janela. Para obter mais detalhes, consulte Sintaxe e uso da função de janela.
Opcional:
DISTINCTRemove valores duplicados da matriz.
WITHIN GROUP orderby_clauseCláusula que contém uma ou mais expressões (geralmente nomes de colunas) que determinam a ordem dos valores em cada matriz.
A sintaxe WITHIN GROUP(ORDER BY) oferece suporte aos mesmos parâmetros que a cláusula principal ORDER BY em uma instrução SELECT. Consulte ORDER BY.
PARTITION BY expr2Cláusula de função de janela que especifica uma expressão (normalmente um nome de coluna). Esta expressão define partições que agrupam as linhas de entrada antes da aplicação da função. Para obter mais detalhes, consulte Sintaxe e uso da função de janela.
ORDER BY expr3[ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] [{window_frame}]Expressão opcional para ordenar dentro de cada partição, seguida por um quadro de janela opcional. Para uma sintaxe
window_framedetalhada, consulte Sintaxe e uso da função de janela.Quando essa função é usada com um quadro baseado em intervalo, a cláusula ORDER BY oferece suporte a apenas uma única coluna. Os quadros baseados em linhas não têm essa restrição.
LIMIT não é suportado.
Retornos¶
Retorna um valor do tipo ARRAY.
A quantidade máxima de dados que ARRAY_AGG pode retornar para uma única chamada é 128 MB.
Notas de uso¶
Se você não especificar WITHIN GROUP(ORDERBY), a ordem dos elementos dentro de cada matriz é imprevisível. (Uma cláusula ORDER BY fora da cláusula WITHIN GROUP se aplica à ordem das linhas de saída, não à ordem dos elementos da matriz dentro de uma linha).
Se você especificar um número para uma expressão em WITHIN GROUP(ORDER BY), esse número será analisado como uma constante numérica, não como a posição ordinal de uma coluna na lista SELECT. Portanto, não especifique números como expressões WITHIN GROUP(ORDER BY).
Se você especificar DISTINCT e WITHIN GROUP, ambos devem se referir à mesma coluna. Por exemplo:
Se você especificar colunas diferentes para DISTINCT e WITHIN GROUP, ocorrerá um erro:
Você deve especificar a mesma coluna para DISTINCT e WITHIN GROUP ou omitir DISTINCT.
DISTINCT e WITHIN GROUP são compatíveis com as chamadas de função de janela somente quando não houver uma cláusula ORDER BY dentro da cláusula OVER. Quando uma cláusula ORDER BY é usada na cláusula OVER, os valores na matriz de saída seguem a mesma ordem padrão (ou seja, a ordem equivalente a
WITHIN GROUP (ORDER BY expr3)).Valores NULL são omitidos da saída.
Exemplos¶
As consultas de exemplo abaixo utilizam as tabelas e dados mostrados abaixo:
Este exemplo mostra a saída não articulada de uma consulta que não usa ARRAY_AGG(). O contraste na saída entre este exemplo e o exemplo a seguir mostra que ARRAY_AGG() articula os dados.
Este exemplo mostra como usar ARRAY_AGG() para articular uma coluna de saída em uma matriz em uma única linha:
Este exemplo mostra o uso da palavra-chave DISTINCT com ARRAY_AGG().
Este exemplo usa duas cláusulas ORDER BY separadas. Uma controla a ordem na matriz de saída dentro de cada linha e a outra controla a ordem das linhas de saída:
O exemplo a seguir usa um conjunto de dados diferente. A função ARRAY_AGG é chamada como uma função de janela com um quadro de janela ROWS BETWEEN. Primeiro, crie a tabela e carregue-a com 14 linhas:
Agora execute a seguinte consulta. Observe que apenas um conjunto de resultados parcial é mostrado aqui.