2010-02-04 15 views
20

Estoy (completamente) aprendiendo SQL en este momento y encontré la cláusula GROUP BY.¿Algún motivo para la cláusula GROUP BY sin función de agregación?

GROUP BY agrega o agrupa el conjunto de resultados de acuerdo con los argumentos que le proporcione. Si utiliza esta cláusula en una consulta, puede realizar funciones agregadas en el conjunto de resultados para buscar información estadística en el conjunto de resultados, como encontrar los promedios (AVG()) o la frecuencia (COUNT()).

Mi pregunta es: ¿es la declaración GROUP BY de alguna manera útil sin una función agregada adjunta?

actualización Usando GROUP BY como sinónimo de DISTINCT es (probablemente) una mala idea porque sospecho que es más lento.

Respuesta

13

es la declaración GROUP BY de alguna manera útil sin una función agregada de acompañamiento?

Usando DISTINCT sería un sinónimo en una situación de este tipo, pero la razón por la que querrías/tiene que definir una cláusula GROUP BY sería el fin de poder definir HAVING detalles cláusula.

Si es necesario definir una cláusula HAVING, que tiene para definir un GROUP BY - no se puede hacer en conjunción con DISTINCT.

+1

Entonces su respuesta es "no", ¿verdad? –

+0

@Niels: Depende de los datos y el modelo de datos, pero IME Nunca he tenido la necesidad que puedo recordar –

6

puede realizar una DISTINCT de selección mediante el uso de un GRUPO POR sin AGREGADOS.

-2

Se usa para más que simplemente funciones de agregación.

Por ejemplo, considere el siguiente código:

SELECT product_name, MAX('last_purchased') FROM products GROUP BY product_name 

Esto devolverá sólo 1 de los resultados por producto, pero con el último valor actualizado de que los registros.

+3

'MAX()' es una función de agregado. –

+0

@am: Neils pregunta por usos sin la función Agregar –

+0

No agrega, selecciona un solo valor de una lista. _Un agregado es una colección de elementos que se juntan para formar una cantidad total_ – Amirshk

6

Grupo por lata utilizado en dos vías Majorly
1) en conjunción con funciones de agregación SQL
2) para eliminar filas duplicadas de un conjunto de resultados

responder SO a sus mentiras de interrogación en la segunda parte de USEs arriba descrita.

1

Nota: todo lo que a continuación sólo se aplica a MySQL

GROUP BY es guaranteed para devolver resultados en orden, DISTINCT no lo es.

GROUP BY junto con ORDER BY NULL es de la misma eficacia que DISTINCT (y se implementa en el modo say).Si hay un índice en el campo agregado (o diferenciado), ambas cláusulas utilizan escaneo de índice suelto en este campo.

En GROUP BY, puede devolver expresiones no agrupadas y no agregadas. MySQL seleccionará cualquier valor aleatorio del grupo correspondiente para calcular la expresión.

Con GROUP BY, puede omitir las expresiones GROUP BY de la cláusula SELECT. Con DISTINCT, no puedes. Cada fila devuelta por un DISTINCT se garantiza que es única.

Cuestiones relacionadas