Pregunta

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

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

¿Cuándo más lo haría? GROUP BY ¿Sería útil y cuáles son las ramificaciones en el rendimiento?

¿Fue útil?

Solución

Para recuperar la cantidad de widgets de cada categoría de widgets que tenga más de 5 widgets, puede hacer esto:

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

La cláusula "tener" es algo que la gente a menudo olvida, y en lugar de eso optan por recuperar todos sus datos para el cliente y recorrerlos allí.

Otros consejos

GROUP BY es similar a DISTINCT en que agrupa varios 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 brindarle un control granular cuando se usa 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

Agrupar por obliga a completar todo el conjunto antes de que se devuelvan los registros (ya que es una clasificación implícita).

Por esa razón (y muchas otras), nunca utilice Agrupar por en una subconsulta.

Contar el número de veces que se utilizan 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 el DISTINCT declaración.

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC

GROUP BY también ayuda cuando desea generar un informe que promedie o sume una gran cantidad de datos.Puede AGRUPAR por ID de departamento y SUMAR todos los ingresos por ventas o PROMEDIO del recuento de ventas de cada mes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top