¿Hay alguna diferencia entre GROUP BY y DISTINCT?

Resuelto Brettski asked hace 16 años • 25 respuestas

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 BYSe entiende el uso de funciones agregadas).

Brettski avatar Oct 03 '08 03:10 Brettski
Aceptado

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 : Distincty screw => get list of unique values in a table column)

Skeolan avatar Oct 02 '2008 20:10 Skeolan

GROUP BYle permite utilizar funciones agregadas, como AVG, MAX, MIN, SUMy COUNT. Por otro lado DISTINCTsimplemente 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 amountvalores en todas las filas de ese departamento.

Andru Luvisi avatar Oct 02 '2008 20:10 Andru Luvisi