Funzioni di aggregazione (Entity SQL)Aggregate Functions (Entity SQL)

Un'aggregazione è un construct di linguaggio che condensa una raccolta in un scalare come parte di un'operazione di gruppo.An aggregate is a language construct that condenses a collection into a scalar as a part of a group operation. Le aggregazioni Entity SQLEntity SQL sono disponibili in due formati:Entity SQLEntity SQL aggregates come in two forms:

  • Entity SQLEntity SQL funzioni di raccolta che possono essere utilizzate ovunque in un'espressione. collection functions that may be used anywhere in an expression. È incluso l'utilizzo di funzioni di aggregazione nelle proiezioni e di predicati che agiscono sulle raccolte.This includes using aggregate functions in projections and predicates that act on collections. Le funzioni di raccolta sono la modalità preferibile di specificare aggregazioni in Entity SQLEntity SQL.Collection functions are the preferred mode of specifying aggregates in Entity SQLEntity SQL.

  • Aggregazioni di gruppo in espressioni di query che dispongono di una clausola GROUP BY.Group aggregates in query expressions that have a GROUP BY clause. Come in Transact-SQLTransact-SQL, le aggregazioni di gruppo accettano DISTINCT e ALL come modificatori all'input di aggregazione.As in Transact-SQLTransact-SQL, group aggregates accept DISTINCT and ALL as modifiers to the aggregate input.

Entity SQLEntity SQL tenta innanzitutto di interpretare un'espressione come funzione di raccolta e se l'espressione è nel contesto di un'espressione SELECT la interpreta come aggregazione di gruppo. first tries to interpret an expression as a collection function and if the expression is in the context of a SELECT expression it interprets it as a group aggregate.

Entity SQLEntity SQL definisce un operatore di aggregazione speciale chiamato GROUPPARTITION. defines a special aggregate operator called GROUPPARTITION. Questo operatore consente di ottenere un riferimento al set di input raggruppato.This operator enables you to get a reference to the grouped input set. Questo consente di ottenere query di raggruppamento più avanzate, dove i risultati della clausola GROUP BY possono essere usati in posizioni diverse dalle funzioni di raccolta o di aggregazione di gruppo.This allows more advanced grouping queries, where the results of the GROUP BY clause can be used in places other than group aggregate or collection functions.

Funzioni di raccoltaCollection Functions

Le funzioni di raccolta operano su raccolte e restituiscono un valore scalare.Collection functions operate on collections and return a scalar value. Ad esempio, se orders è una raccolta di tutti gli oggetti orders, è possibile calcolare la prima data di spedizione usando l'espressione seguente:For example, if orders is a collection of all orders, you can calculate the earliest ship date with the following expression:

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

Aggregazioni di gruppoGroup Aggregates

Le aggregazioni di gruppo vengono calcolate su un risultato di gruppo definito dalla clausola GROUP BY.Group aggregates are calculated over a group result as defined by the GROUP BY clause. La clausola GROUP BY suddivide i dati in gruppi.The GROUP BY clause partitions data into groups. Per ogni gruppo nel risultato, viene applicata la funzione di aggregazione e viene calcolata un'aggregazione distinta usando gli elementi in ciascun gruppo come input nel calcolo dell'aggregazione.For each group in the result, the aggregate function is applied and a separate aggregate is calculated by using the elements in each group as inputs to the aggregate calculation. Quando in un'espressione SELECT viene usata una clausola GROUP BY, nella proiezione, nella clausola ORDER BY o HAVING possono essere presenti solo nomi di espressioni di raggruppamento, aggregazioni o espressioni costanti.When a GROUP BY clause is used in a SELECT expression, only grouping expression names, aggregates, or constant expressions may be present in the projection, HAVING, or ORDER BY clause.

Nell'esempio seguente viene calcolata la quantità media ordinata per ciascun prodotto.The following example calculates the average quantity ordered for each product.

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

group by ol.Product as p

È possibile usare un'aggregazione di gruppo senza una clausola GROUP BY esplicita nell'espressione SELECT.It is possible to have a group aggregate without an explicit GROUP BY clause in the SELECT expression. Tutti gli elementi saranno trattati come un gruppo singolo, equivalente al caso della specifica di un raggruppamento basato su una costante.All elements will be treated as a single group, equivalent to the case of specifying a grouping based on a constant.

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

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

Le espressioni usate nella clausola GROUP BY vengono valutate usando lo stesso ambito della risoluzione dei nomi che sarebbe visibile all'espressione con la clausola WHERE.Expressions used in the GROUP BY clause are evaluated by using the same name-resolution scope that would be visible to the WHERE clause expression.

Vedere ancheSee Also

FunzioniFunctions