¿Hay alguna diferencia entre GROUP BY y DISTINCT?
Las dos consultas siguientes dan cada una el mismo resultado:
SELECT column FROM table GROUP BY column
SELECT DISTINCT column FROM table
¿Hay algo diferente en la forma en que se procesan estos comandos o son lo mismo?
(Esta no es una pregunta sobre agregados. GROUP BY
Se entiende el uso de funciones agregadas).
La respuesta de MusiGenesis es funcionalmente la correcta con respecto a su pregunta tal como se indica; SQL Server es lo suficientemente inteligente como para darse cuenta de que si está utilizando "Agrupar por" y no utiliza ninguna función agregada, entonces lo que realmente quiere decir es "Distinto" y, por lo tanto, genera un plan de ejecución como si simplemente hubiera usado "Distinto". ".
Sin embargo, creo que también es importante tener en cuenta la respuesta de Hank : el tratamiento arrogante de "Group By" y "Distinct" podría conducir a algunas trampas perniciosas en el futuro si no se tiene cuidado. No es del todo correcto decir que "no es una pregunta sobre agregados" porque está preguntando sobre la diferencia funcional entre dos palabras clave de consulta SQL, una de las cuales está destinada a usarse con agregados y la otra no.
A veces, un martillo puede funcionar para introducir un tornillo, pero si tienes un destornillador a mano, ¿para qué molestarte?
(a los efectos de esta analogía, Hammer : Screwdriver :: GroupBy : Distinct
y screw => get list of unique values in a table column
)
GROUP BY
le permite utilizar funciones agregadas, como AVG
, MAX
, MIN
, SUM
y COUNT
. Por otro lado DISTINCT
simplemente elimina los duplicados.
Por ejemplo, si tiene varios registros de compras y desea saber cuánto gastó cada departamento, puede hacer algo como:
SELECT department, SUM(amount) FROM purchases GROUP BY department
Esto le dará una fila por departamento, que contiene el nombre del departamento y la suma de todos los amount
valores en todas las filas de ese departamento.