standard sets functions sql sql-server group-by

sets - t sql standard deviation



¿Cómo utilizo T-SQL Group By (5)

Agrupar obliga al conjunto completo a rellenarse antes de que se devuelvan los registros (ya que es un tipo implícito).

Por esa razón (y muchas otras), nunca use un grupo por en una subconsulta.

Sé que necesito (aunque no sé por qué) una cláusula GROUP BY al final de una consulta SQL que utiliza funciones agregadas como count , sum , avg , etc.

SELECT count(userID), userName FROM users GROUP BY userName

¿En qué otro caso sería útil GROUP BY y cuáles son las ramificaciones de desempeño?


GROUP BY también ayuda cuando desea generar un informe que promedia o suma un montón de datos. Puede agrupar por ID de departamento y SUM todos los ingresos de ventas o AVG el recuento de ventas de cada mes.


GROUP BY es similar a DISTINCT porque agrupa múltiples registros en uno.

Este ejemplo, tomado de http://www.devguru.com/technologies/t-sql/7080.asp , enumera productos distintos en la tabla Productos.

SELECT Product FROM Products GROUP BY Product Product ------------- Desktop Laptop Mouse Network Card Hard Drive Software Book Accessory

La ventaja de GROUP BY sobre DISTINCT es que puede proporcionarle un control granular cuando se utiliza con una cláusula HAVING.

SELECT Product, count(Product) as ProdCnt FROM Products GROUP BY Product HAVING count(Product) > 2 Product ProdCnt -------------------- Desktop 10 Laptop 5 Mouse 3 Network Card 9 Software 6


Para recuperar el número de widgets de cada categoría de widget que tiene más de 5 widgets, puede hacer esto:

SELECT WidgetCategory, count(*) FROM Widgets GROUP BY WidgetCategory HAVING count(*) > 5

La cláusula de "tener" es algo de lo que la gente a menudo se olvida, en lugar de ello, opta por recuperar todos sus datos para el cliente y repetirlos allí.


Contar el número de veces que se usan las etiquetas podría ser un ejemplo de google:

SELECT TagName, Count(*) AS TimesUsed FROM Tags GROUP BY TagName ORDER TimesUsed

Si simplemente desea un valor distinto de etiquetas, preferiría usar la instrucción DISTINCT .

SELECT DISTINCT TagName FROM Tags ORDER BY TagName ASC