Funciones canónicas de agregado (Entity SQL)

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 limitaciones con respecto a dónde se pueden usar.

En la tabla siguiente se muestran las funciones canónicas de Entity SQL de agregado.

Función Descripción

Avg(expression)

Devuelve el promedio de los valores no NULL.

Argumentos

Valor de tipo Int32, Int64, Double o Decimal.

Valor devuelto

Tipo de expression. Null si los valores de entrada son null.

Ejemplo

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

BigCount(expression)

Devuelve el tamaño del agregado incluso NULL y los valores duplicados.

Argumentos

Cualquier tipo.

Valor devuelto

Valor de tipo Int64.

Ejemplo

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

Count(expression)

Devuelve el tamaño del agregado incluso NULL y los valores duplicados.

Argumentos

Cualquier tipo.

Valor devuelto

Valor de tipo Int32.

Ejemplo

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

Max(expression)

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 o Binary.

Valor devuelto

Tipo de expression. Null si los valores de entrada son null.

Ejemplo

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

Min(expression)

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 o Binary

Valor devuelto

Tipo de expression. Null si los valores de entrada son null.

Ejemplo

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

StDev(expression)

Devuelve la desviación estándar de los valores no NULL.

Argumentos

Valor de tipo Int32, Int64, Double o Decimal.

Valor devuelto

Valor de tipo Double. Null si los valores de entrada son null.

Ejemplo

SELECT VALUE StDev(product.ListPrice)

FROM AdventureWorksEntities.Product AS product

where product.ListPrice > 2.0M

Sum(expression)

Devuelve la suma de los valores no NULL.

Argumentos

Valor de tipo Int32, Int64, Double o Decimal.

Valor devuelto

Valor de tipo Double. Null si los valores de entrada son null.

Ejemplo

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

La funcionalidad equivalente está disponible en el proveedor administrado de Microsoft SQL Client. Para obtener más información, vea .Proveedor de datos de .NET Framework para SQL Server (SqlClient) para las 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, sólo 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.

Agregados basados en una colección y agregados basados en un grupo

Los agregados basados en una colección constituyen el modo preferido de especificar agregados en Entity SQL. Sin embargo, los agregados basados en un grupo también se admiten para facilitar a los usuarios de SQL Server que aprendan a usar Entity SQL.

De igual modo, se puede especificar DISTINCT o ALL como modificador para la entrada del agregado con el fin de obtener un funcionamiento similar al de SQL, pero el mecanismo más conveniente es usar el operador set() en su lugar.

Vea también

Conceptos

Funciones canónicas (Entity SQL)