- Categorias:
Funções de dados semiestruturados e estruturados (Ordem superior)
REDUCE¶
Reduz uma matriz a um único valor com base na lógica de uma expressão lambda.
A função REDUCE recebe uma matriz, um valor acumulador inicial e uma função lambda. Ele aplica a função lambda a cada elemento da matriz, atualizando o acumulador com cada resultado. Após processar todos os elementos, REDUCE retorna o valor final do acumulador.
Sintaxe¶
Argumentos¶
arrayA matriz com os elementos a serem reduzidos. A matriz pode ser semiestruturada ou estruturada.
initO valor inicial do acumulador.
lambda_expressionUma expressão lambda que define a lógica de redução em cada elemento da matriz.
A expressão lambda deve ser especificada na seguinte sintaxe:
O argumento
accé o acumulador, e o argumentovalueé o elemento atual que está sendo processado na matriz.
Retornos¶
Esta função pode retornar um valor de qualquer tipo de dados.
Se a matriz de entrada estiver vazia, a função retornará o valor inicial do acumulador.
A função retorna NULL nestes casos:
A matriz de entrada é NULL.
O valor inicial do acumulador é NULL.
A função lambda retorna NULL.
Notas de uso¶
Quando o tipo de dados para um argumento
valuelambda é especificado explicitamente, o elemento da matriz é forçado para o tipo especificado antes da invocação do lambda. Para obter informações sobre coerção, consulte Conversão do tipo de dados.A verificação de tipo impõe que o valor inicial do acumulador, o argumento lambda do acumulador e o valor de retorno da execução lambda tenham todos os mesmos tipos lógicos e físicos. Se a conversão for usada para atender a esse requisito, o maior tipo físico dos três será usado.
O argumento
valuepode ter valores NULL intermediários. Para obter um exemplo, consulte Como ignorar valores NULL em uma matriz.
Exemplos¶
Os exemplos a seguir usam a função REDUCE.
Cálculo da soma dos valores em uma matriz¶
Use a função REDUCE para retornar a soma dos valores em uma matriz e especificar 0 como o valor inicial do acumulador:
Este exemplo é o mesmo que o exemplo anterior, mas especifica uma matriz estruturada do tipo INT:
Use a função REDUCE para retornar a soma dos valores em uma matriz e especificar 10 como o valor inicial do acumulador:
Cálculo da soma do quadrado de cada valor em uma matriz¶
Use a função REDUCE para retornar a soma do quadrado de cada valor na matriz e especifique 0 como o valor inicial do acumulador:
Como ignorar valores NULL em uma matriz¶
Neste exemplo, o argumento array inclui valores NULL. Quando esta matriz é passada para a função REDUCE, o acumulador terá valores NULL intermediários.
Use a função REDUCE para retornar a soma dos valores na matriz e use a função ZEROIFNULL na lógica da expressão lambda para ignorar valores NULL na matriz. A expressão lambda usa a função ZEROIFNULL para processar cada valor na matriz usando a seguinte lógica:
Se
valfor NULL, o resultado da expressão lambda seráacc + 0.Se
valnão for NULL, o resultado da expressão lambda seráacc + val.
Executar a consulta:
Geração de valores de cadeia de caracteres¶
Use a função REDUCE para retornar uma lista de valores de cadeia de caracteres concatenando cada valor na matriz:
Como usar uma matriz para o acumulador¶
Use a função REDUCE junto com a função ARRAY_PREPEND na lógica da expressão lambda para retornar uma matriz que inverta a ordem da matriz de entrada:
Como usar lógica condicional¶
Use a função REDUCE junto com a função IFF na lógica da expressão lambda para executar uma ação baseada na lógica condicional semelhante a uma expressão if-then. Este exemplo usa a seguinte lógica na expressão lambda:
Se o valor da matriz for menor que sete, então eleve-o ao quadrado e adicione-o ao acumulador.
Se o valor da matriz for maior ou igual a sete, adicione-o ao acumulador sem elevá-lo ao quadrado.
Redução de uma matriz de elementos em uma tabela para um único valor¶
Suponha que você tenha uma tabela chamada orders com as colunas order_id, order_date e order_detail. A coluna order_detail é uma matriz dos itens de linha, sua quantidade de compra e subtotal. A tabela contém duas linhas de dados. A seguinte instrução SQL cria esta tabela e insere as linhas:
Use a função REDUCE para retornar a soma do subtotal de todos os itens em cada pedido:
Use a função REDUCE para retornar uma lista dos itens vendidos em cada pedido:
Faça referência a uma coluna de tabela em uma expressão lambda para reduzir elementos de matriz em dados de tabela¶
Criar uma tabela com uma coluna do tipo ARRAY e outra coluna do tipo INT:
Use a função REDUCE para retornar a soma dos valores na matriz em cada linha adicionando o valor em col2 ao valor do acumulador: