Aquí podría ser tu PUBLICIDAD


¿Cómo utilizo T-SQL Group By

votos
28

Sé que tengo que tener (aunque no sé por qué) una GROUP BYcláusula sobre el final de una consulta SQL que utiliza cualquiera de las funciones agregadas como count, sum, avg, etc:

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

¿Cuándo más sería GROUP BYútil y cuáles son las ramificaciones de desempeño?

Publicado el 05/08/2008 a las 19:55
fuente por usuario Seibar
En otros idiomas...        العربية       

5 respuestas

votos
30

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í.

Respondida el 05/08/2008 a las 08:32
fuente por usuario Chris Farmer


Aquí podría ser tu PUBLICIDAD


votos
13

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
Respondida el 19/08/2008 a las 03:02
fuente por usuario Seibar

votos
3

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.

Respondida el 05/08/2008 a las 08:01
fuente por usuario Stu

votos
2

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 DISTINCTdeclaración.

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
Respondida el 05/08/2008 a las 07:58
fuente por usuario GateKiller

votos
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.

Respondida el 05/08/2008 a las 08:00
fuente por usuario Dillie-O