Funzioni canoniche di aggregazione (Entity SQL)

Le aggregazioni sono espressioni che riducono una serie di valori di input, ad esempio, in un singolo valore. In genere, vengono utilizzate insieme alla clausola GROUP BY dell'espressione SELECT. Il relativo utilizzo è tuttavia soggetto ad alcuni vincoli.

Nella tabella seguente sono illustrate le funzioni canoniche di aggregazione Entity SQL.

Funzione Descrizione

Avg(expression)

Restituisce la media dei valori non Null.

Argomenti

Valore Int32, Int64, Double e Decimal.

Valore restituito

Tipo di expression. Null, se tutti i valori di input sono valori null.

Esempio

SELECT VALUE AVG(p.ListPrice) FROM AdventureWorksEntities.Product as p

BigCount(expression)

Restituisce la dimensione dell'aggregazione, inclusi i valori Null e duplicati.

Argomenti

Qualsiasi tipo.

Valore restituito

Valore Int64.

Esempio

SELECT VALUE BigCount(p.ProductID) FROM AdventureWorksEntities.Product as p

Count(expression)

Restituisce la dimensione dell'aggregazione, inclusi i valori Null e duplicati.

Argomenti

Qualsiasi tipo.

Valore restituito

Valore Int32.

Esempio

SELECT VALUE Count(p.ProductID) FROM AdventureWorksEntities.Product as p

Max(expression)

Restituisce il numero massimo di valori non Null.

Argomenti

ValoreByte, Int16, Int32, Int64, Byte, Single, Double, Decimal, DateTime, DateTimeOffset, Time, String, Binary.

Valore restituito

Tipo di expression. Null, se tutti i valori di input sono valori null.

Esempio

SELECT VALUE Max(p.ListPrice) FROM AdventureWorksEntities.Product as p

Min(expression)

Restituisce il numero minimo di valori non Null.

Argomenti

Valore Byte, Int16, Int32, Int64, Byte, Single, Double, Decimal, DateTime, DateTimeOffset, Time, String e Binary

Valore restituito

Tipo di expression. Null, se tutti i valori di input sono valori null.

Esempio

SELECT VALUE Min(p.ListPrice) FROM AdventureWorksEntities.Product as p

StDev(expression)

Restituisce la deviazione standard dei valori non Null.

Argomenti

Valore Int32, Int64, Double, Decimal.

Valore restituito

Tipo Double. Null, se tutti i valori di input sono valori null.

Esempio

SELECT VALUE StDev(product.ListPrice)

FROM AdventureWorksEntities.Product AS product

where product.ListPrice > 2.0M

Sum(expression)

Restituisce la somma dei valori non Null.

Argomenti

Valore Int32, Int64, Double, Decimal.

Valore restituito

Valore Double. Null, se tutti i valori di input sono valori null.

Esempio

SELECT VALUE Sum(p.ListPrice) FROM AdventureWorksEntities.Product as p

Una funzionalità equivalente è disponibile nel provider gestito del client Microsoft SQL. Per ulteriori informazioni, vedere .Provider di dati .NET Framework per SQL Server (SqlClient) per le funzioni di Entity Framework.

Aggregazioni basate su insieme

Le aggregazioni basate su insieme (funzioni di insieme) operano sugli insiemi e restituiscono un valore. Se, ad esempio, ORDERS è un insieme di tutti gli ordini, è possibile calcolare la prima data di consegna con l'espressione seguente:

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

Le espressioni all'interno di aggregazioni basate su insieme vengono valutate nell'ambito di risoluzione dei nomi di ambiente corrente.

Aggregazioni basate su gruppo

Le aggregazioni basate su gruppo vengono calcolate su un gruppo definito dalla clausola GROUP BY. Per ogni gruppo nel risultato viene calcolata un'aggregazione distinta utilizzando gli elementi in ciascun gruppo come input nel calcolo dell'aggregazione. Quando in un'espressione selezionata viene utilizzata una clausola GROUP BY, nella proiezione o nella clausola ORDER BY possono essere presenti solo nomi di espressioni di raggruppamento, aggregazioni o espressioni costanti.

Nell'esempio seguente viene calcolata la quantità media ordinata per ciascun prodotto:

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

È possibile utilizzare un'aggregazione basata su gruppo senza una clausola GROUP BY esplicita nell'espressione SELECT. In questo caso, tutti gli elementi verranno considerati come singolo gruppo. Si tratta di un caso analogo alla definizione di un raggruppamento basato su costante. Si consideri, ad esempio, l'espressione seguente:

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

L'espressione equivale alla seguente:

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

Le espressioni all'interno dell'aggregazione basata su gruppo vengono valutate nell'ambito della risoluzione dei nomi visibile per l'espressione della clausola WHERE.

Come in Transact-SQL, le aggregazioni basate su gruppo possono inoltre specificare un modificatore ALL o DISTINT. Se è specificato il modificatore DISTINCT, eventuali duplicati vengono eliminati dall'insieme di input di aggregazione prima del calcolo dell'aggregazione. Se è specificato il modificatore ALL o se non è specificato alcun modificatore, non viene eseguita l'eliminazione dei duplicati.

Confronto tra aggregazioni basate su insieme e aggregazioni basate su gruppo

Le aggregazioni basate su insieme costituiscono la modalità preferita per specificare aggregazioni in Entity SQL. Sono tuttavia supportate anche le aggregazioni basate su gruppo, che semplificano l'apprendimento dell'utilizzo di Entity SQL da parte degli utenti di SQL Server.

Analogamente, è supportata la specifica di DISTINCT (o ALL) come modificatore nell'input di aggregazione per ottenere un comportamento simile a SQL, ma il meccanismo preferito prevede invece l'utilizzo dell'operatore set().

Vedere anche

Concetti

Funzioni canoniche (Entity SQL)