2008-08-05 18 views
26

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. :¿Cómo se usa T-SQL Group? Por

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

Cuando más podría GROUP BY sean útiles, y cuáles son las ramificaciones de rendimiento?

+0

Tenga en cuenta que 'GROUP BY' no ordena el conjunto de resultados. Si necesita un pedido en particular, agregue ORDER BY también –

Respuesta

28

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

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

El "tener" cláusula es algo que la gente se olvida a menudo, optando en su lugar para recuperar todos sus datos al cliente y recorriendo allí.

1

Contar el número de etiquetas veces se utilizan podría ser un ejemplo Google:

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

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

SELECT DISTINCT TagName 
FROM Tags 
ORDER BY TagName ASC 
0

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.

1

Group Forzará que todo el conjunto se complete antes de que se devuelvan los registros (ya que es un tipo implícito).

Por ese motivo (y muchos otros), nunca utilice un grupo por en una subconsulta.

12

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

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 se le puede dar 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 
+1

ejemplo muy maravillosamente simple es un +1 – user96403