sql - promedio - ¿Alguna razón para la cláusula GROUP BY sin función de agregación?
promedio en sql ejemplo (5)
Estoy (a fondo) aprendiendo SQL en este momento y encontré la cláusula GROUP BY
.
GROUP BY
agrega o agrupa el conjunto de resultados de acuerdo con los argumentos que le da. Si utiliza esta cláusula en una consulta, puede realizar funciones agregadas en el conjunto de resultados para encontrar información estadística en el conjunto de resultados, como los promedios de localización (AVG())
o la frecuencia (COUNT())
.
Mi pregunta es: ¿es la instrucción GROUP BY de alguna manera útil sin una función agregada de acompañamiento?
Actualizar utilizando GROUP BY
como sinónimo de DISTINCT
es (probablemente) una mala idea porque sospecho que es más lento.
¿Es la instrucción GROUP BY de alguna manera útil sin una función agregada que la acompañe?
El uso de DISTINCT
sería un sinónimo en tal situación, pero la razón por la que querría / tendría que definir una cláusula GROUP BY
sería para poder definir los detalles de la cláusula HAVING
.
Si necesita definir una cláusula HAVING
, debe definir una GROUP BY
: no puede hacerlo junto con DISTINCT
.
Grupo por lata utilizado de dos maneras mayoritariamente.
1) en conjunción con las funciones de agregación de SQL
2) para eliminar filas duplicadas de un conjunto de resultados
Por lo tanto, la respuesta a su pregunta se encuentra en la segunda parte de los EEU descritos anteriormente.
Puede realizar una selección DISTINCT utilizando GROUP BY sin AGREGADOS .
Se utiliza para más 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á solo 1 resultado por producto, pero con el último valor actualizado de esos registros.
Nota: todo lo que sigue a continuación solo se aplica a MySQL
GROUP BY
tiene la guaranteed de devolver los resultados en orden, DISTINCT
no lo es.
GROUP BY
junto con ORDER BY NULL
es de la misma eficiencia que DISTINCT
(y se implementa de la misma manera). Si hay un índice en el campo que se agrega (o se distingue), ambas cláusulas usan un escaneo de índice suelto sobre 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. Se garantiza que cada fila devuelta por un DISTINCT
es única.