Condividi tramite


Funzioni di aggregazione canoniche

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

Funzioni canoniche di aggregazione di Entity SQL

Di seguito sono riportate le funzioni canoniche di aggregazione di Entity SQL.

Avg(expression)

Restituisce la media dei valori non Null.

Argomenti

Tipo Int32, Int64, Double e Decimal.

Valore restituito

Il tipo di expression oppure null se tutti i valori di input sono valori null.

Esempio

queryString = @"SELECT VALUE AVG(p.ListPrice)
    FROM AdventureWorksEntities.Products as p";
SELECT VALUE AVG(p.ListPrice) 
FROM AdventureWorksEntities.Products AS p 

BigCount(expression)

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

Argomenti

Qualsiasi tipo.

Valore restituito

Oggetto Int64.

Esempio

queryString = @"SELECT VALUE BigCount(p.ProductID)
    FROM AdventureWorksEntities.Products as p";
SELECT VALUE BigCount(p.ProductID) 
FROM AdventureWorksEntities.Products AS p 

Count(expression)

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

Argomenti

Qualsiasi tipo.

Valore restituito

Oggetto Int32.

Esempio

queryString = @"SELECT VALUE Count(p.ProductID)
    FROM AdventureWorksEntities.Products as p";
SELECT VALUE Count(p.ProductID) 
FROM AdventureWorksEntities.Products AS p 

Max(expression)

Restituisce il numero massimo di valori non Null.

Argomenti

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

Valore restituito

Il tipo di expression oppure null se tutti i valori di input sono valori null.

Esempio

queryString = @"SELECT VALUE MAX(p.ListPrice)
    FROM AdventureWorksEntities.Products as p";
SELECT VALUE MAX(p.ListPrice) 
FROM AdventureWorksEntities.Products 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, Binary.

Valore restituito

Il tipo di expression oppure null se tutti i valori di input sono valori null.

Esempio

queryString = @"SELECT VALUE MIN(p.ListPrice)
    FROM AdventureWorksEntities.Products as p";
SELECT VALUE MIN(p.ListPrice) 
FROM AdventureWorksEntities.Products AS p 

StDev(expression)

Restituisce la deviazione standard dei valori non Null.

Argomenti

Valore Int32, Int64, Double, Decimal.

Valore restituito

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

Esempio

queryString = @"SELECT VALUE StDev(product.ListPrice)
    FROM AdventureWorksEntities.Products AS product
    WHERE product.ListPrice > @price";
SELECT VALUE StDev(product.ListPrice) 
FROM AdventureWorksEntities.Products AS product 
WHERE product.ListPrice > @price

StDevP(expression)

Restituisce la deviazione standard della popolazione di tutti i valori.

Argomenti

Valore Int32, Int64, Double, Decimal.

Valore restituito

Un valore Double, oppure null se tutti i valori di input sono valori null.

Esempio

queryString = @"SELECT VALUE StDevP(product.ListPrice)
    FROM AdventureWorksEntities.Products AS product
    WHERE product.ListPrice > @price";
SELECT VALUE StDevP(product.ListPrice) 
FROM AdventureWorksEntities.Products AS product 
WHERE product.ListPrice > @price

Sum(expression)

Restituisce la somma dei valori non Null.

Argomenti

Valore Int32, Int64, Double, Decimal.

Valore restituito

Un valore Double, oppure null se tutti i valori di input sono valori null.

Esempio

queryString = @"SELECT VALUE Sum(p.ListPrice)
    FROM AdventureWorksEntities.Products as p";
SELECT VALUE Sum(p.ListPrice) 
FROM AdventureWorksEntities.Products AS p 

Var(expression)

Restituisce la varianza di tutti i valori non Null.

Argomenti

Valore Int32, Int64, Double, Decimal.

Valore restituito

Un valore Double, oppure null se tutti i valori di input sono valori null.

Esempio

queryString = @"SELECT VALUE Var(product.ListPrice)
    FROM AdventureWorksEntities.Products AS product
    WHERE product.ListPrice > @price";
SELECT VALUE Var(product.ListPrice) 
FROM AdventureWorksEntities.Products AS product 
WHERE product.ListPrice > @price

VarP(expression)

Restituisce la varianza della popolazione di tutti i valori non Null.

Argomenti

Valore Int32, Int64, Double, Decimal.

Valore restituito

Un valore Double, oppure null se tutti i valori di input sono valori null.

Esempio

queryString = @"SELECT VALUE VarP(product.ListPrice)
    FROM AdventureWorksEntities.Products AS product
    WHERE product.ListPrice > @price";
SELECT VALUE VarP(product.ListPrice) 
FROM AdventureWorksEntities.Products AS product 
WHERE product.ListPrice > @price

Una funzionalità equivalente è disponibile nel provider gestito del client Microsoft SQL. Per altre informazioni, vedere SqlClient per funzioni di Entity Framework.

Aggregazioni basate su raccolta

Le aggregazioni basate su raccolte (funzioni della Collection) operano sulle raccolte e restituiscono un valore. Se, ad esempio, ORDERS è una raccolta 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 raccolte 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 usando gli elementi in ciascun gruppo come input nel calcolo dell'aggregazione. Quando in un'espressione selezionata viene usata 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 usare un'aggregazione basata su gruppo senza una clausola GROUP BY esplicita nell'espressione SELECT. In questo caso, tutti gli elementi vengono considerati come singolo gruppo. Equivale essenzialmente 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 di 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 DISTINCT. Se è specificato il modificatore DISTINCT, eventuali duplicati vengono eliminati dalla raccolta 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.

Vedi anche