Funções de agregação (Entity SQL)

Um agregado é uma construção de linguagem que condensa uma coleção em um escalar como parte de uma operação de grupo. As agregações de SQL de entidade vêm em duas formas:

  • Funções de coleta de SQL de entidade que podem ser usadas em qualquer lugar em uma expressão. Isso inclui o uso de funções agregadas em projeções e predicados que atuam sobre coleções. As funções de coleta são o modo preferencial de especificar agregações no Entity SQL.

  • Agregações de grupo em expressões de consulta que têm uma cláusula GROUP BY. Como no Transact-SQL, as agregações de grupo aceitam DISTINCT e ALL como modificadores para a entrada agregada.

O Entity SQL primeiro tenta interpretar uma expressão como uma função de coleção e, se a expressão estiver no contexto de uma expressão SELECT, interpreta-a como uma agregação de grupo.

Entity SQL define um operador de agregado especial chamado GROUPPARTITION. Este operador permite que você obtenha uma referência ao conjunto de entrada agrupado. Isso permite consultas de agrupamento mais avançadas, onde os resultados da cláusula GROUP BY podem ser usados em locais diferentes das funções de agregação ou coleta de grupo.

Funções de Recolha

As funções de coleta operam em coleções e retornam um valor escalar. Por exemplo, se orders for uma coleção de todos , ordersvocê pode calcular a data de envio mais antiga com a seguinte expressão:

min(select value o.ShipDate from LOB.Orders as o)

Agregados do Grupo

Os agregados de grupo são calculados sobre um resultado de grupo, conforme definido pela cláusula GROUP BY. A cláusula GROUP BY particiona os dados em grupos. Para cada grupo no resultado, a função agregada é aplicada e uma agregação separada é calculada usando os elementos em cada grupo como entradas para o cálculo agregado. Quando uma cláusula GROUP BY é usada em uma expressão SELECT, somente nomes de expressões de agrupamento, agregações ou expressões constantes podem estar presentes na cláusula de projeção, HAVING ou ORDER BY.

O exemplo a seguir calcula a quantidade média encomendada para cada produto.

select p, avg(ol.Quantity) from LOB.OrderLines as ol

group by ol.Product as p

É possível ter uma agregação de grupo sem uma cláusula explícita GROUP BY na expressão SELECT. Todos os elementos serão tratados como um único grupo, equivalente ao caso de especificar um agrupamento com base numa constante.

select avg(ol.Quantity) from LOB.OrderLines as ol

select avg(ol.Quantity) from LOB.OrderLines as ol group by 1

As expressões usadas na cláusula GROUP BY são avaliadas usando o mesmo escopo de resolução de nome que seria visível para a expressão da cláusula WHERE.

Ver também