Agregační kanonické funkce
Agregace jsou výrazy, které snižují řadu vstupních hodnot, například do jedné hodnoty. Agregace se obvykle používají ve spojení s klauzulí GROUP BY výrazu SELECT a existují omezení, kde je lze použít.
Agregační funkce ENTITY SQL
Následuje agregační kanonické funkce Entity SQL.
Avg(expression)
Vrátí průměr hodnot, které nejsou null.
Argumenty
A Int32
, Int64
, Double
a Decimal
.
Návratová hodnota
Typ nebo expression
null
pokud všechny vstupní hodnoty jsou null
hodnoty.
Příklad
queryString = @"SELECT VALUE AVG(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE AVG(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
BigCount(výraz)
Vrátí velikost agregace včetně hodnot null a duplicitních hodnot.
Argumenty
Libovolný typ.
Návratová hodnota
A Int64
.
Příklad
queryString = @"SELECT VALUE BigCount(p.ProductID)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE BigCount(p.ProductID)
FROM AdventureWorksEntities.Products AS p
Count(expression)
Vrátí velikost agregace včetně hodnot null a duplicitních hodnot.
Argumenty
Libovolný typ.
Návratová hodnota
A Int32
.
Příklad
queryString = @"SELECT VALUE Count(p.ProductID)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE Count(p.ProductID)
FROM AdventureWorksEntities.Products AS p
Max(výraz)
Vrátí maximum hodnot, které nejsou null.
Argumenty
A Byte
, Int16
, , Int32
, Int64
, Byte
, Double
Single
String
DateTime
Decimal
DateTimeOffset
Time
. Binary
Návratová hodnota
Typ nebo expression
null
pokud všechny vstupní hodnoty jsou null
hodnoty.
Příklad
queryString = @"SELECT VALUE MAX(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE MAX(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
Min(výraz)
Vrátí minimum hodnot, které nejsou null.
Argumenty
A Byte
, Int16
, , Int32
, Int64
, Byte
, Double
Single
String
DateTime
Decimal
DateTimeOffset
Time
. Binary
Návratová hodnota
Typ nebo expression
null
pokud všechny vstupní hodnoty jsou null
hodnoty.
Příklad
queryString = @"SELECT VALUE MIN(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE MIN(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
StDev(expression)
Vrátí směrodatnou odchylku hodnot, které nejsou null.
Argumenty
An Int32
, , Double
Int64
, Decimal
.
Návratová hodnota
Úloha Double
. Null
, pokud jsou null
všechny vstupní hodnoty hodnotami.
Příklad
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)
Vrátí směrodatnou odchylku základního souboru všech hodnot.
Argumenty
An Int32
, , Double
Int64
, Decimal
.
Návratová hodnota
A Double
nebo null
pokud jsou všechny vstupní hodnoty null
hodnotami.
Příklad
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)
Vrátí součet hodnot, které nejsou null.
Argumenty
An Int32
, , Double
Int64
, Decimal
.
Návratová hodnota
A Double
nebo null
pokud jsou všechny vstupní hodnoty null
hodnotami.
Příklad
queryString = @"SELECT VALUE Sum(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE Sum(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
Var(výraz)
Vrátí odchylku všech hodnot, které nejsou null.
Argumenty
An Int32
, , Double
Int64
, Decimal
.
Návratová hodnota
A Double
nebo null
pokud jsou všechny vstupní hodnoty null
hodnotami.
Příklad
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(výraz)
Vrátí odchylku základního souboru všech hodnot, které nejsou null.
Argumenty
An Int32
, , Double
Int64
, Decimal
.
Návratová hodnota
A Double
nebo null
pokud jsou všechny vstupní hodnoty null
hodnotami.
Příklad
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
Ekvivalentní funkce jsou k dispozici ve zprostředkovateli spravovaném klientem Microsoft SQL. Další informace naleznete v tématu SqlClient for Entity Framework Functions.
Agregace založené na kolekcích
Agregace založené na kolekcích (funkce kolekce) pracují s kolekcemi a vracejí hodnotu. Pokud je například orders kolekce všech objednávek, můžete vypočítat nejstarší datum expedice pomocí následujícího výrazu:
min(select value o.ShipDate from LOB.Orders as o)
Výrazy uvnitř agregací založené na kolekci se vyhodnocují v aktuálním rozsahu překladu okolních názvů.
Agregace založené na skupinách
Agregace založené na skupinách se počítají přes skupinu definovanou klauzulí GROUP BY. Pro každou skupinu ve výsledku se vypočítá samostatná agregace pomocí prvků v každé skupině jako vstupu do agregovaného výpočtu. Pokud se klauzule group-by používá ve výrazu select, můžou být v projekci nebo klauzuli order-by přítomny pouze názvy výrazů seskupení, agregace nebo konstantní výrazy.
Následující příklad vypočítá průměrné množství objednané pro každý produkt:
select p, avg(ol.Quantity) from LOB.OrderLines as ol
group by ol.Product as p
Ve výrazu SELECT je možné mít agregaci založenou na skupině bez explicitní klauzule group-by. V tomto případě se všechny prvky považují za jednu skupinu. To je ekvivalent určení seskupení na základě konstanty. Vezměte například následující výraz:
select avg(ol.Quantity) from LOB.OrderLines as ol
To odpovídá následujícímu:
select avg(ol.Quantity) from LOB.OrderLines as ol group by 1
Výrazy uvnitř agregace založené na skupině se vyhodnocují v oboru překladu názvů, který by byl viditelný pro výraz klauzule WHERE.
Stejně jako v transact-SQL mohou agregace založené na skupinách také určit modifikátor ALL nebo DISTINCT. Pokud je zadán modifikátor DISTINCT, duplicity jsou vyloučeny z agregované vstupní kolekce před tím, než se agregace vypočítá. Je-li zadán modifikátor ALL (nebo pokud není zadán žádný modifikátor), neprovádí se žádná duplicitní eliminace.