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