Está en la página 1de 20

Consultas de agregado.

Las funciones de agregado realizan un clculo sobre un conjunto de valores y devuelven un solo valor. Si exceptuamos la funcin COUNT, todas las funciones de agregado ignoran los valores NULL. Las funciones de agregado se suelen utilizar con la clusula GROUP BY de la instruccin SELECT. Todas las funciones de agregado son deterministas. Esto significa que las funciones de agregado devuelven el mismo valor cada vez que se les llama con un conjunto especfico de valores de entrada.

COUNT (Transact-SQL)
Devuelve el nmero de elementos de un grupo. COUNT funciona como la funcin COUNT_BIG. La nica diferencia entre ambas funciones est en los valores devueltos. COUNT siempre devuelve un valor de tipo de datos int. COUNT_BIG siempre devuelve un valor de tipo de datos bigint.

USE TSQL2012; SELECT COUNT(*) AS numorders FROM Sales.Orders; Esta consulta genera el siguiente resultado numorders ----------830 SELECT shipperid, COUNT(*) AS numorders FROM Sales.Orders GROUP BY shipperid; Esta consulta genera el siguiente resultado. shipperid numorders ----------- ----------1 249 2 326 3 255

Clusula HAVING
Especifica una condicin de bsqueda para un grupo o agregado. HAVING se suele utilizar con la clusula GROUP BY. y funciona como un filtro, , la clusula HAVING utiliza un predicado ,que se evalua por grupo en lugar de por fila [ HAVING < search_condition > ]

Por ejemplo, suponga que necesita agrupar slo los pedidos enviados por ID cargador y ao de envo, y el filtro slo a los grupos con menos de 100 pedidos. Usted puede utilizar el siguiente consultar para lograr esta tarea SELECT shipperid, YEAR(shippeddate) AS shippedyear, COUNT(*) AS numorders FROM Sales.Orders WHERE shippeddate IS NOT NULL GROUP BY shipperid, YEAR(shippeddate) HAVING COUNT(*) < 100;
Esta consulta genera el siguiente resultado. Shipperid ----------1 3 1 3 2 shippedyear ----------2008 2008 2006 2006 2006 numorders ----------79 73 36 51 56

Clausula MAX (Transact-SQL)


Devuelve el valor mximo de la expresin. Puede ir seguida de la clusula OVER.

Clausula MIN (Transact-SQL)


Devuelve el valor mnimo de la expresin. Puede ir seguida de la clusula OVER.

Clausula SUM (Transact-SQL)


Devuelve la suma de todos los valores o solo de los valores DISTINCT de la expresin. SUM solo puede utilizarse con columnas numricas. Los valores Null se pasan por alto.Puede ir seguida de la OVER (clusula de Transact-SQL).

Ejemplo de MIN,MAX,SUM
SELECT shipperid, COUNT(*) AS numorders, COUNT(shippeddate) AS shippedorders, MIN(shippeddate) AS firstshipdate, MAX(shippeddate) AS lastshipdate, SUM(val) AS totalvalue FROM Sales.OrderValues GROUP BY shipperid;

Esta consulta genera la siguiente salida (fechas formateadas para facilitar la lectura).

CHECKSUM_AGG (Transact-SQL)
Devuelve la suma de comprobacin de los valores de un grupo. Se omiten los valores NULL. Puede ir seguida de la clusula OVER.

GROUPING (Transact-SQL)
Indica si una expresin de columna especificada en una lista GROUP BY es agregada o no. GROUPING devuelve 1 para agregado y 0 para no agregado, en el conjunto de resultados. GROUPING solo se puede usar en la lista de SELECT <seleccin>, clusulas HAVING y ORDER BY. La funcin GROUPING acepta un solo elemento como entrada y devuelve 0 cuando el elemento forma parte del conjunto de agrupaciones y 1 cuando no lo es. La consulta siguiente muestra cmo utilizar el Funcin de agrupacin.

SELECT shipcountry, GROUPING(shipcountry) AS grpcountry, shipregion , GROUPING(shipregion) AS grpcountry, shipcity , GROUPING(shipcity) AS grpcountry, COUNT(*) AS numorders FROM Sales.Orders GROUP BY ROLLUP( shipcountry, shipregion, shipcity );

Funciones de ventana agregada


Funciones de agregacin de la ventana son los mismos que las funciones de agregado de grupo ( por ejemplo, SUM , COUNT , AVG , MIN y MAX ), excepto las funciones de agregacin de ventana se aplican a una ventana de filas definidas por la clusula OVER.

He aqu un ejemplo de una consulta en la tabla Sales.OrderValues regresar para cada pedido el ID de cliente, orden de identificacin, y el orden de valor, utilizando funciones de la ventana. SELECT custid, orderid, val, SUM(val) OVER(PARTITION BY custid) AS custtotal, SUM(val) OVER() AS grandtotal FROM Sales.OrderValues;

la consulta tambin devuelve el total de todos los valores y el total del cliente.

Otras funciones de ventana.


ROW_NUMBER . RANGO. DENSE_RANK. NTILE .

La siguiente consulta muestra el uso de estas funciones.


SELECT custid, orderid, val, ROW_NUMBER() OVER(ORDER BY val) AS rownum, RANK() OVER(ORDER BY val) AS rnk, DENSE_RANK() OVER(ORDER BY val) AS densernk, NTILE(100) OVER(ORDER BY val) AS ntile100 FROM Sales.OrderValues;

Resultado de la consulta.