Funciones canónicas de agregado
Los agregados son expresiones que reducen una serie de valores de entrada a un único valor, por ejemplo. Los agregados suelen usarse junto con la cláusula GROUP BY de la expresión SELECT y hay restricciones con respecto a dónde se pueden usar.
Funciones canónicas de agregado de Entity SQL
A continuación se muestran las funciones canónicas de agregado de Entity SQL.
Avg(expresión)
Devuelve el promedio de los valores no NULL.
Argumentos
Un Int32
, Int64
, Double
y Decimal
.
Valor devuelto
Tipo de expression
, o null
si todos los valores de entrada son valores null
.
Ejemplo
queryString = @"SELECT VALUE AVG(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE AVG(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
BigCount(expresión)
Devuelve el tamaño del agregado, incluyendo los valores NULL y los duplicados.
Argumentos
Cualquier tipo.
Valor devuelto
Una clase Int64
.
Ejemplo
queryString = @"SELECT VALUE BigCount(p.ProductID)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE BigCount(p.ProductID)
FROM AdventureWorksEntities.Products AS p
Count(expresión)
Devuelve el tamaño del agregado, incluyendo los valores NULL y los duplicados.
Argumentos
Cualquier tipo.
Valor devuelto
Una clase Int32
.
Ejemplo
queryString = @"SELECT VALUE Count(p.ProductID)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE Count(p.ProductID)
FROM AdventureWorksEntities.Products AS p
Max(expresión)
Devuelve el máximo de los valores no NULL.
Argumentos
Valor de tipo Byte
Int16
Int32
Int64
Byte
Single
Double
Decimal
DateTime
DateTimeOffset
Time
String
.
Valor devuelto
Tipo de expression
, o null
si todos los valores de entrada son valores null
.
Ejemplo
queryString = @"SELECT VALUE MAX(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE MAX(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
Min(expresión)
Devuelve el mínimo de los valores no NULL.
Argumentos
Valor de tipo Byte
Int16
Int32
Int64
Byte
Single
Double
Decimal
DateTime
DateTimeOffset
Time
String
.
Valor devuelto
Tipo de expression
, o null
si todos los valores de entrada son valores null
.
Ejemplo
queryString = @"SELECT VALUE MIN(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE MIN(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
StDev(expresión)
Devuelve la desviación estándar de los valores no NULL.
Argumentos
Valor de tipo Int32
, Int64
, Double
o Decimal
.
Valor devuelto
Un objeto Double
. Null
si los valores de entrada son null
.
Ejemplo
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(expresión)
Devuelve la desviación estándar de la población para todos los valores.
Argumentos
Valor de tipo Int32
, Int64
, Double
o Decimal
.
Valor devuelto
Double
, o null
si todos los valores de entrada son null
.
Ejemplo
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(expresión)
Devuelve la suma de los valores no NULL.
Argumentos
Valor de tipo Int32
, Int64
, Double
o Decimal
.
Valor devuelto
Double
, o null
si todos los valores de entrada son null
.
Ejemplo
queryString = @"SELECT VALUE Sum(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE Sum(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
Var(expresión)
Devuelve la varianza de todos los valores no nulos.
Argumentos
Valor de tipo Int32
, Int64
, Double
o Decimal
.
Valor devuelto
Double
, o null
si todos los valores de entrada son null
.
Ejemplo
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(expresión)
Devuelve la varianza de la población para todos los valores no nulos.
Argumentos
Valor de tipo Int32
, Int64
, Double
o Decimal
.
Valor devuelto
Double
, o null
si todos los valores de entrada son null
.
Ejemplo
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
La funcionalidad equivalente está disponible en el proveedor administrado de Microsoft SQL Client. Para más información, consulte SqlClient para funciones de Entity Framework.
Agregados basados en colecciones
Los agregados basados en una colección (funciones de colección) operan en las colecciones y devuelven un valor. Por ejemplo, si ORDERS es una colección de todos los pedidos, puede calcular la fecha de entrega más reciente con la expresión siguiente:
min(select value o.ShipDate from LOB.Orders as o)
Las expresiones que se encuentran dentro de agregados basados en una colección se evalúan dentro del ámbito actual de la resolución de nombres.
Agregados basados en un grupo
Los agregados basados en un grupo se calculan sobre un grupo según define la cláusula GROUP BY. Para cada grupo del resultado, se calcula un agregado diferente utilizando los elementos de cada grupo como entrada del cálculo del agregado. Cuando se usa una cláusula GROUP-BY en una expresión SELECT, solo se pueden presentar en la cláusula ORDER-BY o de la proyección los nombres de la expresión de agrupamiento, los agregados o las expresiones constantes.
En el ejemplo siguiente se calcula la cantidad promedio pedida de cada producto:
select p, avg(ol.Quantity) from LOB.OrderLines as ol
group by ol.Product as p
Es posible tener un agregado basado en un grupo sin una cláusula GROUP-BY explícita en la expresión SELECT. En este caso, todos los elementos se tratarán como un único grupo. Esto es equivalente a especificar una agrupación basada en una constante. Tome como ejemplo la siguiente expresión:
select avg(ol.Quantity) from LOB.OrderLines as ol
Es equivalente a la siguiente:
select avg(ol.Quantity) from LOB.OrderLines as ol group by 1
Las expresiones que se encuentran dentro del agregado basado en un grupo se evalúan dentro del ámbito de resolución de nombres que sería visible para la expresión de la cláusula WHERE.
Al igual que en Transact-SQL, los agregados basados en un grupo también pueden especificar un modificador ALL o DISTINCT. Si se especifica el modificador DISTINCT, los duplicados se eliminan de la colección de entrada del agregado, antes de calcularlo. Si se especifica el modificador ALL o no se especifica ningún modificador, no se lleva a cabo la eliminación de los duplicados.