Compartir a través de


Funciones de agregado (Entity SQL)

Un agregado es una construcción de lenguaje que condensa una colección en un escalar como parte de una operación de grupo. Los agregados de Entity SQL se incluyen en dos formas:

  • Funciones de colección de Entity SQL que se pueden usar en cualquier parte de una expresión. Esto incluye el uso de funciones de agregado en proyecciones y predicados que actúan en colecciones. Las funciones de colección son el modo preferido de especificar agregados en Entity SQL.

  • Agrupa agregados en expresiones de consulta que tienen una cláusula GROUP BY. Como en Transact-SQL, los agregados de grupo aceptan DISTINCT y ALL como modificadores a la entrada de agregado.

Entity SQL primero intenta interpretar una expresión como una función de colección y si la expresión está en el contexto de una expresión SELECT, la interpreta como un agregado de grupo.

Entity SQL define un operador de agregado especial denominado GROUPPARTITION. Este operador le permite obtener una referencia al conjunto de entrada agrupado. Esto permite realizar consultas de agrupación más avanzadas, donde los resultados de la cláusula GROUP BY se pueden usar en lugares distintos de las funciones de agregación o recopilación de grupos.

Funciones de colección

Las funciones de colección funcionan en colecciones y devuelven un valor escalar. Por ejemplo, si orders es una colección de todas orders, puede calcular la fecha de envío más antigua con la expresión siguiente:

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

Agregados de grupo

Los agregados de grupo se calculan sobre un resultado de grupo tal como se define en la cláusula GROUP BY. La cláusula GROUP BY divide los datos en grupos. Para cada grupo del resultado, se aplica la función de agregado y se calcula un agregado independiente mediante el uso de los elementos de cada grupo como entradas para el cálculo agregado. Cuando se usa una cláusula GROUP BY en una expresión SELECT, solo los nombres de expresión de agrupación, agregados o expresiones constantes pueden estar presentes en la cláusula projection, HAVING o ORDER BY.

En el ejemplo siguiente se calcula la cantidad media ordenada para cada producto.

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

group by ol.Product as p

Es posible tener un agregado de grupo sin una cláusula GROUP BY explícita en la expresión SELECT. Todos los elementos se tratarán como un único grupo, equivalente al caso de especificar una agrupación basada en una constante.

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

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

Las expresiones usadas en la cláusula GROUP BY se evalúan mediante el mismo ámbito de resolución de nombres que sería visible para la expresión de cláusula WHERE.

Consulte también